#include<stdio.h>
#include<string.h>
#define N 10
int main(){
int A[N][N],r[N][N],e[N][N],i,j,k,n,m,t=0;
scanf("%d%d",&n,&m); //输入方阵的阶数,和幂次数 即 求n阶方阵的m次幂
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&A[i][j]);
memset(e,0,sizeof(e));
for(i=0;i<n;i++)
e[i][i]=1;
while(m--){
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
for(k=0;k<n;k++) //用t作为搬运工,作为某一行*某一列过程的中间
t+=(e[i][k]*A[k][j]);
r[i][j]=t; //而后赋值于人r[i][j]
t=0; //继续下一个位置的搬运
}
for(i=0;i<n;i++) // 第一次 r=e*A
for(j=0;j<n;j++) // 第二次 r=e*A*A 因此将上一轮的结果带入下一轮
e[i][j]=r[i][j]; // 即e=r
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d ",r[i][j]);
printf("\n");
}
return 0;
}
此处参考了:http://blog.csdn.net/rodestillfaraway/article/details/50529597
修改了矩阵乘法中间的部分过程