矩阵幂(矩阵相乘)

矩阵幂(矩阵相乘)题目描述给定一个 n n 的矩阵 求该矩阵的 k 次幂 即 P k 输入描述 第一行 两个整数 n 2 lt n lt 10 k 1 lt k lt 5 两个数字之间用一个空格隔开 含义如上所示 接下来有 n 行 每行 n 个正整数 其中 第 i 行第 j 个整数表示矩阵中第 i 行第 j 列的矩阵元素 Pij 且 0 lt Pij lt 10 另外 数据保证最后结果不会超过 10 8 输出描述 对于每组测试数据 输

题目描述

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

输入描述:

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

输出描述:

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

输入

2 2 9 8 9 3 

输出

153 96 108 81 

#include<iostream> #include<string.h> using namespace std; struct matrix//用结构体封装一个二维数组 { int a[100][100]; }origin,res;//res.a存储结果 ,origin.a是需要运算的矩阵 ,k是次幂数 ,n是矩阵的行列数 matrix multiply(matrix x,matrix y,int N)//矩阵相乘函数 { matrix temp; memset(temp.a,0,sizeof(temp.a)); for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { for(int k=0;k<N;k++) { temp.a[i][j]+=x.a[i][k]*y.a[k][j]; } } } return temp; } int main() { int n,k,i,j; while(~scanf("%d%d",&n,&k)) { for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&origin.a[i][j]); k--; res=origin; while(k--) { res=multiply(res,origin,n); } for(i=0;i<n;i++){ for(j=0;j<n-1;j++) printf("%d ",res.a[i][j]); printf("%d\n",res.a[i][n-1]); } } return 0; } 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232746.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号