大意是给两个三元组表示的稀疏矩阵,要求将其相乘结果仍用三元组表示:刚开始被书上的伪代码的一个错误给误导着debug一下午,好不郁闷,晚上才发现!程序实现要求先输入两个三元组的稀疏矩阵,放码子:
#include<iostream> #include<cstdio> using namespace std; int sma[6][100],smb[6][100],smc[6][100]; int check(int matrix[6][100],int x,int y) { int k=1; while(k<=matrix[0][2] && (matrix[k][0]!=x || matrix[k][1]!=y)) k++; if(k<=matrix[0][2]) return matrix[k][2]; return 0; } void multi_matrix()//m*n的矩阵与n*k的矩阵相乘,结果矩阵m*k { int i,j,l,num=1,product; for(i=0;i<sma[0][0];i++)//sma的行 for(j=0;j<smb[0][1];j++)//smb的列 { product=0; for(l=0;l<sma[0][1];l++)//sma[0][1]==smb[0][0],前者列等于后者行 product+=check(sma,i,l)*check(smb,l,j); if(product!=0) { smc[num][0]=i; smc[num][1]=j; smc[num][2]=product; num++; } } smc[0][0]=sma[0][0];//记录结果稀疏矩阵的信息 smc[0][1]=smb[0][1]; smc[0][2]=num-1; } void input(int matrix[6][100]) { int i,j; scanf("%d%d%d",&matrix[0][0],&matrix[0][1],&matrix[0][2]);//输入相乘矩阵信息 for(i=1;i<=matrix[0][2];i++) for(j=0;j<3;j++) scanf("%d",&matrix[i][j]); } int main() { int i,j; input(sma); input(smb); multi_matrix(); for(j=0;j<3;j++) printf("%d ",smc[0][j]); printf("/n"); for(i=1;i<=smc[0][2];i++) { for(j=0;j<3;j++) printf("%d ",smc[i][j]); printf("/n"); } return false; }