1. 程式人生 > >基礎練習 矩陣乘法

基礎練習 矩陣乘法

理解 之間 實現 依據 矩陣乘法 超過 std 格式 單位

問題描述   給定一個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 }

基礎練習 矩陣乘法