一定要注意a和b数组不能直接进行运算,都会对后面的运算产生影响,还有就是幂次:0次幂是单位数组(左上角到右下角为1,其他位置为0) 1次幂是本身 这两种单独讨论 2次幂才会乘一次 所以当m>2时循环的次数是1。还有就是矩阵乘法的公式要推导出来,稍微有点费时间(忘光了)
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
int a[35][35];
int b[35][35];
int c[35][35];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&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;
}
exit(0);
}
else if(m == 1){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout << a[i][j] << " ";
}
cout << endl;
}
exit(0);
}
else{
while(m>1){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
int t = 0,k=0;
while(t<n){
k += b[i][t]*a[t][j];
t++;
}
c[i][j] = k;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
b[i][j] = c[i][j];
}
}
m--;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout << b[i][j] << " ";
}
cout << endl;
}
return 0;
}