Think:
1注意记录数组初始化
2思想->大数取模
#include <bits/stdc++.h>
using namespace std;
struct node
{
int v[14][14];
};
int n;
struct node multiply(struct node x, struct node y)///矩阵相乘
{
struct node z;
memset(z.v, 0, sizeof(z.v));
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
for(int k = 0; k < n; k++)
{
z.v[i][j] += x.v[i][k] * y.v[k][j];
}
}
}
return z;
}
struct node Ans(struct node a, int k)///矩阵快速幂
{
struct node b;
for(int i = 0; i < n; i++)///记录数组初始化
{
for(int j = 0; j < n; j++)
{
if(i == j)
b.v[i][j] = 1;
else
b.v[i][j] = 0;
}
}
while(k)
{
if(k & 1)
b = multiply(b, a);
a = multiply(a, a);
k >>= 1;
}
return b;
}
int main()
{
int i, j, k;
struct node c;
while(scanf("%d %d", &n, &k) != EOF)
{
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
scanf("%d", &c.v[i][j]);
}
}
c = Ans(c, k);
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
printf("%d%c", c.v[i][j], j == n-1? '\n': ' ');
}
}
}
return 0;
}