赞
踩
【解析】
这题的规模很小,直接暴力计算矩阵的
n
n
n次幂即可,但是为了练习一下快速幂,我就用的快速幂的方法。
将矩阵做成一个结构体/类,用二维数组存放值,别忘了用于矩阵初始化的构造函数。
【代码】
#include<iostream> #include<algorithm> #include<cstring> #include<cmath> using namespace std; const int maxn = 100 + 10; int m, n; struct Matrix { int M[maxn][maxn]; Matrix() { memset(M, 0, sizeof(M)); } Matrix(int t) { for (int i = 0;i < m;i++) { for (int j = 0;j < m;j++) { if (i == j) M[i][j] = 1; else M[i][j] = 0; } } } }; Matrix mul(Matrix a, Matrix b) { Matrix c; for (int i = 0;i < m;i++) for (int j = 0;j < m;j++) for (int k = 0;k < m;k++) c.M[i][j] += a.M[i][k] * b.M[k][j]; return c; } Matrix quickPow(Matrix a, int k) { if (!k) return Matrix(1); Matrix res = a; int ex = 1; while ((ex << 1) <= k) { res = mul(res, res); ex <<= 1; } return mul(res, quickPow(a, k - ex)); } int main() { while (cin >> m >> n) { Matrix mm, t; for (int i = 0;i < m;i++) for (int j = 0;j < m;j++) cin >> mm.M[i][j]; t = quickPow(mm, n); for (int i = 0;i < m;i++) { for (int j = 0;j < m;j++) cout << t.M[i][j] << ' '; cout << endl; } } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。