朴素法实现矩阵乘法

来源:互联网 发布:ipad版淘宝怎么看直播 编辑:程序博客网 时间:2024/05/21 12:01
/*****************************************************************************************普通法实现矩阵乘法:时间复杂度为O(n的3次方)输入:2 21 22 32 31 3 23 2 1输出:2  37  7  411 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;} 

0 0