题意:给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
思路:需要了解矩阵的相关性质,矩阵的0次幂为单位矩阵,及主对角线为1,其余的都为0,矩阵的1次幂为本身,当大于等于2时,需要每次等到一次相乘后的矩阵后,赋值给另一个数组,然后幂次数减一,如此直到循环结束
#include<bits/stdc++.h> #define maxn 100 using namespace std; int a[maxn][maxn]; int b[maxn][maxn]; int c[maxn][maxn]; int main(){ int n,m; cin>>n>>m; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cin>>a[i][j]; b[i][j]=a[i][j]; } } if(m == 0){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(i == j){ cout<<"1 "; } else cout<<"0 "; } cout<<endl; } } else if(m == 1){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cout<<a[i][j]<<" "; } cout<<endl; } } else if(m>=2){ while(m >= 2){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ int res = n; while(res){ c[i][j]+=b[i][res-1]*a[res-1][j]; res--; } } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ b[i][j] = c[i][j]; c[i][j] = 0; } } m--;//阶乘减一 } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cout<<b[i][j]<<" "; } cout<<endl; } } return 0; }
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句