資料結構32——稀疏矩陣的乘法
阿新 • • 發佈:2019-01-22
實驗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];
}