三元组((x,y),z)其中(x,y)表示非零元位置,z表示该坐标的值
由于实际操作时,我们所用的矩阵0非常多,所以一个一个输入值很浪费时间,也浪费空间,所以用一些三元组表示非零元即能表示一个矩阵
三元组稀疏矩阵表示一些图也是很不错的选择
这样就很浪费空间,三元组直接((0,1),1)((1,2),1)((3,4),1)((5,6),1)((7,8),1)
下面是稀疏矩阵代码:
#include#include #include #define SMAX 1000using namespace std;typedef struct{ int i,j; //储存非零元素的行和列信息 int v; //非零元素的值} SPNode; //定义三元组类型typedef struct{ int row,col,notZero; //矩阵的行、列和非零元素的个数 SPNode data[SMAX]; //三元组表} SPMatrix;void printMatrix(SPMatrix m);SPMatrix createMatrix(){ cout<<"enter row and col and notZero"< >row >>col >>notZero; SPMatrix matrix; matrix.row = row; matrix.col = col; matrix.notZero = notZero; for(int k = 1; k <= notZero; k++) { cout <<"enter each row and col and value"< > matrix.data[k].i >>matrix.data[k].j>>matrix.data[k].v; } cout <<"三元组:"< > num; for(int k = 1; k <= num; k++) { m.data[k].v *= num; } return m;}int isExist(SPMatrix m,SPNode a){ for(int i=1;i<=m.notZero;i++) if(m.data[i].i == a.i &&m.data[i].j == a.j) return i; return 0;}SPMatrix Mul(SPMatrix m1,SPMatrix m2){ if(m1.col != m2.row) { cout<<"wrong"< 0){ result.data[flag].v+=data[k].v; } else{ result.notZero++; result.data[result.notZero] = data[k]; } } return result;}int main(){ int num = 0; do { cout<<"***********************************\n"; cout<<"* 菜单 *\n"; cout<<"* 1.矩阵相加 *\n"; cout<<"* 2.矩阵相减 *\n"; cout<<"* 3.矩阵相乘 *\n"; cout<<"* 4.矩阵数乘 *\n"; cout<<"* 6.退出 *\n"; cout<<"***********************************\n"; cin>>num; if(1 == num|| 2 == num || 3 == num) { SPMatrix m1 = createMatrix(); SPMatrix m2 = createMatrix(); cout<<"两矩阵为"< >number; cout<<"矩阵为:"<