基础练习 矩阵乘法
来源:互联网 发布:ubuntu安装qq2012 编辑:程序博客网 时间:2024/05/23 22:30
问题描述
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
1 2
3 4
A的2次幂
7 10
15 22
例如:
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个绝对值不超过10的非负整数,描述矩阵A的值
输出格式
输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
样例输入
2 2
1 2
3 4
1 2
3 4
样例输出
7 10
15 22
思路:
由于矩阵都是方阵,所以不需要考虑每次相乘的两个矩阵的顺序,大大降低了题的难度,按照矩阵乘法规则递归调用求解。也可以重载" * ",下面只给出了主要代码。
15 22
思路:
由于矩阵都是方阵,所以不需要考虑每次相乘的两个矩阵的顺序,大大降低了题的难度,按照矩阵乘法规则递归调用求解。也可以重载" * ",下面只给出了主要代码。
//#define LOCAL#include <cstdio>#include <cstring>#define MAX_X 30#define MAX_Y 30int n, m;struct Matrix{int x, y; //角标int a[MAX_X][MAX_Y]; //内容 void clear(){x = y = 0;memset(a, 0, sizeof(a));}};void PrintMatrix(Matrix &a, int n){for(int i = 0; i < n; i++){int first = 1;for(int j = 0; j < n; j++){if(first){printf("%d", a.a[i][j]);first = 0;}else{printf(" %d", a.a[i][j]);}}printf("\n");}}Matrix Multiplication(Matrix &a, Matrix &b) //n:阶数 , count:幂 -1{Matrix tmp;tmp.clear(); //初始化矩阵 for(int k = 0; k < n; ++k) //k:积矩阵行{for(int x = 0; x < n; ++x) {for(int y = 0; y < n; ++y){tmp.a[k][x] += a.a[k][y] * b.a[y][x];}}} return tmp;}int main(){#ifdef LOCALfreopen("input3.txt", "r", stdin);freopen("output.txt", "w", stdout);#endifMatrix a, ans;scanf("%d", &n);scanf("%d", &m);a.x = a.y = n; for(int i = 0; i < a.x; i++){for(int j = 0; j < a.y; j++){scanf("%d", &a.a[i][j]);ans.a[i][j] = a.a[i][j];}}if(m == 0){for(int i = 0; i < n; i++){for(int j = 0; j < n; j++){ans.a[i][j] = (i == j) ? 1 : 0;}}} else{for(int i = 0; i < m-1; i++){ans = Multiplication(ans, a);}}PrintMatrix(ans, n);return 0;}
struct Matrix{int n, m;int a[MAXN][MAXM];void clear(){n = m = 0;memset(a, 0, sizeof(a));}Matrix operator * (const Matrix &b) const{Matrix tmp;tmp.clear();tmp.n = n;tmp.m = b.m;for(int i = 0; i < n; ++i){for(int j = 0; j< b.m; ++j){for(int k = 0; k < m; ++k){tmp.a[i][j] += a[i][k] * b.a[k][j];}}}return tmp;}};
0 0
- 基础练习 矩阵乘法
- 基础练习 矩阵乘法
- 基础练习 矩阵乘法
- 基础练习 矩阵乘法
- 基础练习 矩阵乘法
- 基础练习 矩阵乘法
- 基础练习 矩阵乘法
- 基础练习 矩阵乘法
- 基础练习 矩阵乘法
- 蓝桥杯 BASIC-17 基础练习 矩阵乘法
- 基础练习 BASIC-17 矩阵乘法
- 1137 矩阵乘法 基础矩阵乘法
- java基础、矩阵乘法
- 蓝桥杯 基础 矩阵乘法
- 矩阵乘法(简单基础)
- 数学基础-线性代数-矩阵乘法
- 矩阵基础 (5). Strassen矩阵乘法
- 编程练习-动态规划(矩阵乘法)
- 原码反码和补码以及Java中数据溢出问题
- hdu3183A Magic Lamp 贪心问题
- java异常处理机制简单原理和应用
- Euler: Counting Sundays
- 一个简单的数组类操作
- 基础练习 矩阵乘法
- 简易暴力推图机械臂制作
- 数据分析分类
- 2015~2016年学习计划
- 学习笔记_JAVA算法_mergesort
- VMware Workstation 11.0.0正式版/注册码/注册机
- sqlmap注入命令
- Perl 对象调用方法使用->符号
- jQuery Tools