实验2.4:稀疏矩阵的乘法
Time Limit: 3000ms, Memory Limit: 10000KB , Accepted: 0, Total Submissions: 0
Description
计算两个稀疏矩阵的乘法
Input
首先输入第一个矩阵的行数和列数,再输入该矩阵的三元组形式,以0 0 0结束
然后输入第二个矩阵的行数和列数,再输入该矩阵的三元组形式,以0 0 0结束
Output
输出相加后的矩阵三元组。
-
Sample Input
3 3 1 1 1 2 2 2 2 3 4 3 1 -4 0 0 0 3 3 1 3 -2 2 3 -5 3 1 8 3 2 -6 0 0 0
-
Sample Output
1 3 -2 2 1 32 2 2 -24 2 3 -10 3 3 8
#include<stdio.h>
int main(){
int n1,m1,n2,m2;
int i,j,k,t,x,y,z;
int array1[20][20],array2[20][20],array0[20][20];
for(i=1;i<20;i++){
for(j=1;j<20;j++){
array1[i][j]=0;
array2[i][j]=0;
array0[i][j]=0;
}
}
scanf("%d%d",&n1,&m1);
while(scanf("%d%d%d",&x,&y,&z)){
if(x==0&&y==0&&z==0) break;
else{
array1[x][y]=z;
}
}
scanf("%d%d",&n2,&m2);
while(scanf("%d%d%d",&x,&y,&z)){
if(x==0&&y==0&&z==0) break;
else{
array2[x][y]=z;
}
}
if(m1<n2){
t=m1;
}
else{
t=n2;
}
for(i=1;i<=n1;i++){
for(j=1;j<=m2;j++){
for(k=1;k<=t;k++){
array0[i][j]+=array1[i][k]*array2[k][j];
}
}
}
for(i=1;i<=n1;i++){
for(j=1;j<=m2;j++){
if(array0[i][j]!=0){
printf("%d %d %d\n",i,j,array0[i][j]);
}
}
}
return 0;
}
顺序表求矩阵乘法:
for(i=1;i<=row1;i++)
for(j=1;j<=col2;j++)
for(k=1;k<=n;k++) //k是row2和col1的较小值
{
array0+=array1[i][k]*array2[k][j];
}