这里好像对行尾空格的要求不是很严……
#include <iostream>
using namespace std;
int a[35][35];
int tmp[35][35];
int ans[35][35];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
cin>>a[i][j];
ans[i][j] = a[i][j];
}
}
if(m==0) //0次幂,打印单位矩阵
{
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
if(i!=j)
cout<<0<<" ";
else if(i==j)
cout<<1<<" ";
}
cout<<endl;
}
return 0;
}
else if(m==1) //1次幂,打印原矩阵
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<ans[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
else //计算m次幂
{
while(--m)
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
for (int k = 1; k <= n; k++)
{
tmp[i][j] += ans[i][k] * a[k][j];
}
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
ans[i][j] = tmp[i][j];
tmp[i][j] = 0;
}
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
cout<<ans[i][j]<<" ";
}
cout << endl;
}
}
return 0;
}