1. 程式人生 > >資料結構32——稀疏矩陣的乘法

資料結構32——稀疏矩陣的乘法

實驗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];  
	    }