九度OJ 1474 矩阵幂(高效算法)

题目描述:

给定一个n*n的矩阵,求该矩阵的k次幂,即P^k。

输入:

输入包含多组测试数据。数据的第一行为一个整数T(0<T<=10),表示要求矩阵的个数。接下来有T组测试数据,每组数据格式如下:第一行:两个整数n(2<=n<=10)、k(1<=k<=5),两个数字之间用一个空格隔开,含义如上所示。接下来有n行,每行n个正整数,其中,第i行第j个整数表示矩阵中第i行第j列的矩阵元素Pij且(0<=Pij<=10)。另外,数据保证最后结果不会超过10^8。

输出:

对于每组测试数据,输出其结果。格式为:n行n列个整数,每行数之间用空格隔开,注意,每行最后一个数后面不应该有多余的空格。

样例输入:32 29 89 33 34 8 49 3 03 5 75 24 0 3 0 10 0 5 8 58 9 8 5 39 6 1 7 87 2 5 7 3样例输出:153 96108 811216 1248 7081089 927 5041161 1151 73947 29 41 22 16147 103 73 116 94162 108 153 168 126163 67 112 158 122152 93 93 111 97来源:2012年北京邮电大学计算机研究生机试真题#include<stdio.h>#include<stdlib.h>typedef struct Matrix{int m[11][11];int n;}Matrix;Matrix multiply(Matrix a,Matrix b){int i,j,k;Matrix c;c.n=a.n;for(i=1;i<=a.n;i++)for(j=1;j<=b.n;j++){c.m[i][j]=0;for(k=1;k<=a.n;k++)c.m[i][j]+=a.m[i][k]*b.m[k][j];}return c;}int main(){int total;while(scanf("%d",&total)!=EOF){while(total–){int n,k;scanf("%d%d",&n,&k);int flag=0;Matrix matrix,matrixa;matrix.n=n;int i,j;for(i=1;i<=n;i++)for(j=1;j<=n;j++)scanf("%d",&matrix.m[i][j]);matrixa=matrix;if(k&1&&k!=1) flag=1;while(k!=1){matrix=multiply(matrix,matrix);k/=2;}if(flag)matrix=multiply(matrix,matrixa);for(i=1;i<=matrix.n;i++){for(j=1;j<=matrix.n;j++){printf("%d",matrix.m[i][j]);if(j!=matrix.n)printf(" ");}printf("\n");}}} return 0;}

,可就是这样,还是有人,期望过多的温暖。

九度OJ 1474 矩阵幂(高效算法)

相关文章:

你感兴趣的文章:

标签云: