1. 程式人生 > >演算法提高 矩陣相乘

演算法提高 矩陣相乘

問題描述   小明最近在為線性代數而頭疼,線性代數確實很抽象(也很無聊),可惜他的老師正在講這矩陣乘法這一段內容。
  當然,小明上課打瞌睡也沒問題,但線性代數的習題可是很可怕的。
  小明希望你來幫他完成這個任務。

  現在給你一個ai行aj列的矩陣和一個bi行bj列的矩陣,
  要你求出他們相乘的積(當然也是矩陣)。
  (輸入資料保證aj=bi,不需要判斷)
輸入格式   輸入檔案共有ai+bi+2行,並且輸入的所有數為整數(long long範圍內)。
  第1行:ai 和 aj
  第2~ai+2行:矩陣a的所有元素
  第ai+3行:bi 和 bj
  第ai+3~ai+bi+3行:矩陣b的所有元素
輸出格式   輸出矩陣a和矩陣b的積(矩陣c)
  (ai行bj列)
樣例輸入 2 2
12 23
45 56
2 2
78 89
45 56
樣例輸出 1971 2356
6030 7141
#include<stdio.h>
int main()
{
	long long int a,b,c,d,i,j,k;
	long long int arr1[1000][1000],arr2[1000][1000],s[1000][1000]={0};
	scanf("%lld%lld",&a,&b);
	for(i=0;i<a;i++)
	{
		for(j=0;j<b;j++)
		{
			scanf("%lld",&arr1[i][j]);
		}
	}
	scanf("%lld%lld",&c,&d);
	for(i=0;i<c;i++)
	{
		for(j=0;j<d;j++)
		{
			scanf("%lld",&arr2[i][j]);
		}
	}
	for(i=0;i<a;i++)
	{
		for(j=0;j<b;j++)
		{
			for(k=0;k<d;k++)
			{
				s[i][k]+=arr1[i][j]*arr2[j][k];
			}
		}
	}
	for(i=0;i<a;i++)
	{
		for(j=0;j<d;j++)
		{
			printf("%lld ",s[i][j]);
		}
		printf("\n");
	}
	return 0;
}