1. 程式人生 > >稀疏矩陣的乘法(陣列)

稀疏矩陣的乘法(陣列)

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>
#include <malloc.h>

int main()
{
	int *a[1000], *b[1000];
	
	int m1, n1, m2, n2;
	int x, y, z;
	int p, q;
	int i, j, sum = 0;

	for (i = 0; i< 1000; i++) {
		a[i] = (int*)malloc(1000 * sizeof(int));
		b[i] = (int*)malloc(1000 * sizeof(int));
		for (j = 0; j < 1000; j++){
			a[i][j] = 0;
			b[i][j] = 0;
		}
	}
	scanf("%d%d",&m1,&n1);
	while(1)
	{
		scanf("%d%d%d",&x,&y,&z);
		if(x == 0 && y == 0 && z == 0)
		{
			break;
		}
		a[x][y] = z;
	}
	scanf("%d%d",&m2,&n2);
	while(1)
	{
		scanf("%d%d%d",&x,&y,&z);
		if(x == 0 && y == 0 && z == 0)
		{
			break;
		}
		b[x][y] = z;
	}
	for(i = 1;i <= m1;i++)
	{
		for(j = 1;j <= n2;j++)
		{
			p = 1;
			q = 1;
			while(p <= n1)
			{
				sum += a[i][p]*b[q][j];
				p++;
				q++;
			}
			if(sum != 0)
			{
				printf("%d %d %d\n",i,j,sum);
			}
			sum = 0;
		}
	}
}