关于矩阵运算的相关总结以及oj训练题矩阵的幂次运算
作者:互联网
首先来认识一下矩阵乘法,矩阵乘法就是两个矩阵相乘,当然,要相乘的话还要满足一定条件——第一个矩阵的列数等于第二个矩阵的行数
具体来演示一下矩阵运算的规则:
矩阵的运算如上所示,更具体的需要去学离散数学,(大一狗表示没学呜呜),然后对于就两个矩阵相乘,代码如下:
1 for(int i=0;i<n;i++) //矩阵c是a与b相乘得到的 2 for(int j=0;j<p;j++) //n*p(n行p列) 3 for(int k=0;k<m;k++) 4 c[i][j]+=a[i][k]*b[k][j];
注意事项以及ac代码如下:
1 #pragma GCC optimize(2) 2 #include<bits/stdc++.h> 3 using namespace std; 4 int a[50][50];//原始输入 5 int b[50][50];//备份,并且最后用来输出 6 int c[50][50];//运算结果 7 int n,m; 8 int main() 9 { 10 cin>>n>>m; 11 for(int i=0;i<n;i++) 12 { 13 for(int j=0;j<n;j++) 14 { 15 cin>>a[i][j]; 16 b[i][j]=a[i][j];//用来备份 17 } 18 } 19 if(m==0) 20 { 21 memset(b,0,sizeof(b)); 22 for(int i=0;i<n;i++) 23 b[i][i]=1;//单位矩阵,如同数的乘法中的1,相当于初始化 24 } 25 else 26 { 27 for(int p=0;p<m-1;p++)//m次方 28 { 29 for(int i=0;i<n;i++) 30 { 31 for(int j=0;j<n;j++) 32 { 33 for(int k=0;k<n;k++) 34 { 35 c[i][j]+=a[i][k]*b[k][j];//模拟运算 36 } 37 } 38 } 39 for(int i=0;i<n;i++) 40 for(int j=0;j<n;j++) 41 { 42 b[i][j]=c[i][j];//反过来赋值,用于下一次相乘 43 c[i][j]=0;//回溯 44 } 45 } 46 } 47 for(int i=0;i<n;i++) 48 { 49 for(int j=0;j<n;j++) 50 { 51 cout<<b[i][j]<<' '; 52 } 53 cout<<endl; 54 } 55 return 0; 56 }
当然,这一种是麻烦做法,
优化做法是快速幂矩阵运算,
可是,我不会( •̀ ω •́ )y
标签:运算,int,备份,矩阵,50,相乘,幂次 来源: https://www.cnblogs.com/LQS-blog/p/15943167.html