OJ題目:click here~~
題目分析:經典題目,矩陣快速冪。
typedef vector<int> vec ;
typedef vector<vec> mat ;
int n ;
mat mul(mat &A , mat &B){
mat C(n , vec(n)) ;
for(int i = 0;i < n;i++)
for(int j = 0;j < n;j++)
for(int k = 0;k < n;k++)
C[i][j] += A[i][k] * B[k][j] ;
return C ;
}
mat pow(mat A , int k){
mat B(n , vec(n)) ;
for(int i = 0;i < n;i++)
B[i][i] = 1 ;
while(k > 0){
if(k&1) B = mul(B , A) ;
A = mul(A , A) ;
k >>= 1 ;
}
return B ;
}
int main(){
int k , T ;
cin >> T ;
while(T--){
scanf("%d%d",&n,&k) ;
mat A(n , vec(n)) ;
for(int i = 0;i < n;i++)
for(int j = 0 ;j < n;j++){
scanf("%d",&A[i][j]) ;
}
A = pow(A, k) ;
for(int i = 0;i < n;i++)
for(int j = 0;j < n;j++){
j == n-1 ? printf("%d\n",A[i][j]) : printf("%d ",A[i][j]) ;
}
}
}