欢迎光临
我们一直在努力

东华OJ-进阶题-9-矩阵乘法(C++)

  • 问题描述
    给定一个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

感想:要嵌套多个for循环~,另外小注意矩阵的0次幂为单位矩阵,1次幂是本身。
代码如下:

#include <bits/stdc++.h>
using namespace std;

void resetToZero(vector<vector<int>> &arr) {
for(size_t i = 0; i<arr.size(); ++i) {
for(size_t j =0; j<arr[i].size(); ++j) {
arr[i][j]=0;
}
}
}

int main() {
int n,m;
cin>>n>>m;
vector<vector<int>> matrix(n,vector<int>(n,0)),temp(n,vector<int>(n,0)),res(n,vector<int>(n,0));
for(int i = 0; i<n; ++i) {
for(int j = 0; j<n; ++j) {
cin>>matrix[i][j];
}
}

if(m>0)
temp = matrix;
else if(m==0) {
for(int i = 0; i<n; ++i)
temp[i][i] = 1;
}
for(int cnt =0; cnt<m–1; ++cnt) {
for(int i = 0; i<n; ++i) {
for(int j = 0; j<n; ++j) {
for(int k = 0; k<n; ++k) {
res[i][j]+=temp[i][k]*matrix[k][j];
}
}
}
temp = res;
resetToZero(res);
}

for(int i = 0; i<n; ++i) {
for(int j = 0; j<n; ++j) {
if(j>0) cout<<" ";
cout<<temp[i][j];
}
cout<<endl;
}

return 0;
}

赞(0)
未经允许不得转载:171主机测评 » 东华OJ-进阶题-9-矩阵乘法(C++)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址