http://47.104.209.207/problem/old1059
直接用矩阵乘法的性质,注意0次方的时候是变成单位矩阵。
1 #include<cmath> 2 #include<iostream> 3 #include<queue> 4 #include<vector> 5 #include<algorithm> 6 using namespace std; 7 const int N=40; 8 int matrix1[N][N],matrix2[N][N]; 9 int t[N][N]; 10 int n,m; 11 void mul(){ 12 for(int i=0;i<n;i++){ 13 for(int j=0;j<n;j++){ 14 int sum=0; 15 for(int k=0;k<n;k++){ 16 sum+=matrix1[i][k]*matrix2[k][j]; 17 } 18 t[i][j]=sum; 19 } 20 } 21 for(int i=0;i<n;i++){ 22 for(int j=0;j<n;j++){ 23 matrix2[i][j]=t[i][j]; 24 } 25 } 26 } 27 int main(){ 28 cin>>n>>m; 29 for(int i=0;i<n;i++){ 30 for(int j=0;j<n;j++){ 31 cin>>matrix1[i][j]; 32 matrix2[i][j]=matrix1[i][j]; 33 } 34 } 35 for(int i=0;i<m-1;i++){ 36 mul(); 37 } 38 if(m>0){ 39 for(int i=0;i<n;i++){ 40 for(int j=0;j<n;j++){ 41 cout<<matrix2[i][j]<<" "; 42 } 43 cout<<endl; 44 } 45 }else{ 46 for(int i=0;i<n;i++){ 47 for(int j=0;j<n;j++){ 48 if(i==j) cout<<"1"<<" "; 49 else cout<<"0"<<" "; 50 } 51 cout<<endl; 52 } 53 } 54 return 0; 55 }