资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个N阶矩阵A,输出A的M次幂(M是非负整数) 例如: A = 1 2 3 4 A的2次幂 7 10 15 22 输入格式 第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数 接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值 输出格式 输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开 样例输入 2 2 1 2 3 4 样例输出 7 10 15 22
#include <iostream> #include <vector> using namespace std; vector<vector<int> > Mypow(vector<vector<int> > res, vector<vector<int> > a,int n) { vector<vector<int> > tmp(n,vector<int>(n,0)); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { for (int col = 0, row = 0; row < n&& col < n; row++, col++) { //第i行第j列元素就等于前面矩阵的第i行乘以后面矩阵的第j列 tmp[i][j] += res[i][col] * a[row][j]; } } return tmp; } int main() { int n,m; cin >> n >> m; vector<vector<int> > a(n, vector<int>(n)), res(n,vector<int>(n)); for(int i = 0;i < n;i++) //输入 for (int j = 0; j < n; j++) { cin >> a[i][j]; } if (m == 0) { //次幂的话直接输出对角线为1的矩阵后结束 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i == j) cout << 1 << ' '; else cout << 0 << ' '; } cout << endl; } return 0; } res = a; while (m > 1) { //m次幂,进行m次循环 res = Mypow(res, a,n); //调用矩阵乘积函数 m--; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << res[i][j] << ' '; } cout << endl; } return 0; }