题目
import java.util.*;
import java.io.*;
public class Main{
/** * [power description] 矩阵幂运算函数 * 1)首先取得矩阵的阶 * 2)创建结果矩阵,原封不动复制原矩阵 * 3)做k次矩阵幂乘 * 4)模拟矩阵乘法的过程,首先循环行,再循环列,再循环每个数 * 5)每行产生一个长度为n的数组,每列产生一个数 * 6)最后返回结果矩阵 * @param matrix [description] * @param k [description] * @return [description] */
public static int[][] power(int[][] matrix,int k){
int n = matrix.length;
int[][] result = new int[n][n];
for(int i=0;i<n;i++){
System.arraycopy(matrix[i],0,result[i],0,n);
}
for(int num=0;num<k-1;num++){
for(int i=0;i<n;i++){
int[] row = new int[n];
for(int j=0;j<n;j++){
int sum =0;
for(int m=0;m<n;m++){
sum += result[i][m] * matrix[m][j];
}
row[j] = sum;
}
System.arraycopy(row,0,result[i],0,n);
}
}
return result;
}
public static void printMat(int[][] matrix){
int n = matrix.length;
for(int i=0;i<n;i++){
StringBuilder sb = new StringBuilder();
for(int j=0;j<n;j++){
if(j != n-1){
sb.append(matrix[i][j]).append(" ");
}else{
sb.append(matrix[i][j]);
}
}
System.out.println(sb);
}
}
public static void main(String[] args) {
Scanner sn = new Scanner(System.in);
while(sn.hasNextInt()){
int num = sn.nextInt();
for(int i=0;i<num;i++){
int n = sn.nextInt();
int k = sn.nextInt();
int[][] mat = new int[n][n];
for(int j=0;j<n;j++){
for(int m=0;m<n;m++){
mat[j][m] = sn.nextInt();
}
}
int[][] result = power(mat,k);
printMat(result);
}
}
}
}