矩阵乘法
来源:互联网 发布:mina 接收数据不完整 编辑:程序博客网 时间:2024/05/22 15:07
矩阵乘法
时间限制: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 <stdio.h>#include <stdlib.h>void calende();int line,mi;int jc[30][30]={0};int jce[30][30]={0};int jcen[30][30]={0};int main(){int i,j;scanf("%d %d",&line,&mi);for(i=0;i<line;i++){for(j=0;j<line;j++){scanf("%d",&jc[i][j]);jce[i][j]=jc[i][j];}}if(mi==0)for(i=0;i<line;i++){jcen[i][i]=1;}calende();return 0;}void calende(){int i,j,z,d; for(i=2;i<=mi;i++)//幂 {for(j=0;j<line;j++)//遍历行 {for(z=0;z<line;z++)//遍历列 {for(d=0;d<line;d++){jcen[j][z]+=jce[j][d]*jc[d][z];}}}if(i==mi)break;for(j=0;j<line;j++)//遍历行 {for(z=0;z<line;z++)//遍历列 { jce[j][z]=jcen[j][z]; jcen[j][z]=0;}} }if(mi==1||mi==0){ for(j=0;j<line;j++)//遍历行 {for(z=0;z<line;z++)//遍历列 {if(mi==1) printf("%d ",jc[j][z]); else printf("%d ",jcen[j][z]);}printf("\n");}}else{for(j=0;j<line;j++)//遍历行 {for(z=0;z<line;z++)//遍历列 { jce[j][z]=jcen[j][z]; jcen[j][z]=0;printf("%d ",jce[j][z]);}printf("\n");}}}
#include <iostream>using namespace std;void calende();void show();void getinfo(int **);void getinfo1(int **);void cleanms(int **);void cleanms1(int **);int line,mi;int **jc=NULL;int **jce=NULL;int **jcen=NULL;int main(){int i,j;cin>>line>>mi;getinfo1(jc);getinfo1(jce);getinfo1(jcen);for(i=0;i<line;i++){for(j=0;j<line;j++){cin>>jc[i][j];}}for (int z = 0; z < line; z++) { jce[z][z] = 1; } calende();show();cleanms1(jc);cleanms1(jce);cleanms1(jcen);return 0;}void calende(){ for (int i = 0; i < mi; i++) { for (int j = 0; j < line; j++) { for (int j2 = 0; j2 < line; j2++) { for (int k = 0; k < line; k++) { jcen[j][j2] += jce[j][k] * jc[k][j2]; } } } for (int j = 0; j < line; j++){ for (int j2 = 0; j2 < line; j2++) { jce[j][j2] = jcen[j][j2]; jcen[j][j2]=0; } } } }void show(){for (int i = 0; i < line; i++) { for (int j = 0; j < line; j++) { cout<<jce[i][j]<<" "; } cout<<endl; } }void getinfo(int **p)//内存不连续 {p=new int*[line];for(int i=0;i<line;i++){p[i]=new int[line];}} void getinfo1(int **a)//保证内存的连续性 {a = new int* [line];a[0] = new int[line * line]; for(int i=1; i<line; i++){ a[i] = a[i-1] + line; }}void cleanms(int **p){for(int i=0; i<line; i++)delete[] p[i];delete[] p;} void cleanms1(int **a){delete[] a[0];delete[] a;}
(全文完)
0 0
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- js实现选项卡功能
- linux下sort用法
- 无焦点下获取条码枪返回值的Hook(再次改良版)
- 25端口
- android QQ侧滑效果
- 矩阵乘法
- 阻止拷贝
- 2015-第6周项目3-人数不定的工资类
- mysql-5.6.24-x64安装 环境window server2008 x64
- LeetCode Search in Rotated Sorted Array
- 解决Sublime Text 2中文显示乱码问题
- 字符串匹配
- 《The C programming language》学习笔记
- C# Socket编程 同步以及异步通信