数据结构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];  
	    } 

猜你喜欢

转载自blog.csdn.net/chengchencheng/article/details/79996349
今日推荐