码迷,mamicode.com
首页 > 其他好文 > 详细

基础练习 矩阵乘法

时间:2017-12-24 16:51:25      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:lag   结果   复杂   cin   cst   保存   接下来   部分   nbsp   

问题描述
  给定一个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
这个题其实就是求矩阵的乘方,在矩阵相乘的基础上循环,在网上看到很多复杂的也是优秀的代码,但是因为我个人目前水平有限只能写出依据原理实现的比较low的代码,
虽然low但是也算容易理解吧
代码如下:
 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int n, m;
 8     cin >> n >> m;
 9     int martix[n][n], result[n][n];
10     for(int i=0;i<n;i++)
11     for(int j=0;j<n;j++)
12     {
13         cin >> martix[i][j];
14         result[i][j] = martix[i][j];
15     }
16     
17     //方阵的0次幂为单位矩阵(左上角到右下角的对角线为1其他部分为0) 
18     if(m==0)
19     {
20         for(int i=0;i<n;i++)
21         {
22             int flag=1; 
23             for(int j=0;j<n;j++)
24             {
25                 if(j==n-1) flag=0;
26                 if(flag)  //元素不是一行的最后一个 
27                 {
28                     if(i==j) cout << 1 << "  ";
29                     else cout << 0 << "  ";
30                 }
31                 else
32                 {
33                     if(i==j) cout << 1 ;
34                     else cout << 0 ;
35                 }
36             }
37             cout << endl;    
38         } 
39     }//if
40     
41     else
42     {
43         //循环计算矩阵的乘方 
44         for(int k=1;k<m;k++)
45         {
46             //临时数组保存计算结果:
47             int temp[n][n]; 
48             memset(temp,0,sizeof(temp)); 
49             
50             //计算每次的乘积: 
51             for(int i=0;i<n;i++)
52             for(int j=0;j<n;j++)
53             for(int s=0;s<n;s++)
54             {
55                 temp[i][j] += result[i][s] * martix[s][j];
56             }    
57             
58             //把每次计算出的结果赋给结果矩阵: 
59             for(int i=0;i<n;i++)
60             for(int j=0;j<n;j++)
61             {
62                 result[i][j] = temp[i][j];
63             }    
64         }
65         
66         //按题目要求输出: 
67         for(int i=0;i<n;i++)
68         {
69             for(int j=0;j<n;j++)
70             {
71                 if(j!=n-1)
72                     cout << result[i][j] << "  ";
73                 else
74                     cout << result[i][j];
75             }
76             cout << endl;
77         }    
78     }//else
79 
80     
81     
82     
83     return 0;
84 }

 

基础练习 矩阵乘法

标签:lag   结果   复杂   cin   cst   保存   接下来   部分   nbsp   

原文地址:http://www.cnblogs.com/wyb666/p/8098174.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!