您的位置:首页 > 编程语言 > C语言/C++

朴素法实现矩阵乘法

2015-11-11 16:26 274 查看
/*****************************************************************************************
普通法实现矩阵乘法:时间复杂度为O(n的3次方)
输入:
2 2
1 2
2 3

2 3
1 3 2
3 2 1
输出:
2  3
7  7  4
11 12 7
说明:其中第一行代表矩阵的行数和列数,之后是矩阵中的各个元素,按行输入和输出。
********************************************************************************************/
#include <cstdio>
#include <cstring>
int main()
{
int cow,column,Ccow,Ccolumn;
int flag=0;
int **A,**B;
while(scanf("%d%d",&cow,&column)==2)
{
if(flag==0)
{
Ccow=cow;
A=new int*[cow];//一维指针数组(注意这里写成int **A=new (int*)[cow])会报错
for(int i=0;i<cow;i++)
A[i]=new int[column];//一维指针数组中的每一个指针指向一个一维数组
flag=1;
for(int i=0;i<cow;i++)
for(int j=0;j<column;j++)
scanf("%d",&A[i][j]);
}
else
{
Ccolumn=column;
B=new int*[cow];//一维指针数组
for(int i=0;i<cow;i++)
B[i]=new int[column];//一维指针数组中的每一个指针指向一个一维数组
//B中元素赋值
for(int i=0;i<cow;i++)
for(int j=0;j<column;j++)
scanf("%d",&B[i][j]);

//由A和B计算中C中元素
int C[Ccow][Ccolumn];
memset(C,0,sizeof(C));
/*************核心算法******************************************/
for(int i=0;i<Ccow;i++)
for(int j=0;j<Ccolumn;j++)
for(int k=0;k<cow;k++)//k指的是A中的列数或B中的行数
{
C[i][j]=C[i][j]+A[i][k]*B[k][j];
}
/***************************************************************/
//输出C中元素
printf("%d  %d\n",Ccow,Ccolumn);
for(int i=0;i<Ccow;i++)
{
for(int j=0;j<Ccolumn;j++)
printf("%d  ",C[i][j]);
printf("\n");
}
//释放申请的空间
//for(int i=0;i<cow;i++)
//		delete []A[i];
//delete []A;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息