书山有路,学海无涯

矩阵

  1 #include <iostream>
  2 #include <stdio.h>
  3 #include <string>
  4 #include <string.h>
  5 #include "biginteger.h"
  6 using namespace std;
  7 struct matrix
  8 {
  9     BigInteger g[10][10];
 10     int n, m;
 11     matrix operator=(const matrix &b)
 12     {
 13         n = b.n;
 14         m = b.m;
 15         for (int i = 0; i < n; i++)
 16         {
 17             for (int j = 0; j < m; j++)
 18             {
 19                 g[i][j] = b.g[i][j];
 20             }
 21         }
 22         return *this;
 23     }
 24 };
 25 matrix operator*(const matrix &a, const matrix &b)
 26 {
 27     matrix c;
 28     if (a.m != b.n || a.n != b.m)
 29         return c;
 30     c.n = a.n;
 31     c.m = a.m;
 32     BigInteger sum;
 33     for (int i = 0; i < a.n; i++)
 34     {
 35         for (int j = 0; j < a.m; j++)
 36         {
 37             int I;
 38             sum = 0;
 39             for (I = 0; I < a.m; I++)
 40             {
 41                 sum = sum+(a.g[i][I] * b.g[I][j]);
 42             }
 43             c.g[i][j] = sum;
 44         }
 45     }
 46     return c;
 47 }
 48 matrix pow(matrix a, int b)
 49 {
 50     matrix ans, base = a;
 51     ans.n = ans.m = a.n;
 52     for (int i = 0; i < ans.n; i++)
 53     {
 54         for (int j = 0; j < ans.m;j++)
 55         {
 56             if(i==j)
 57                 ans.g[i][j] = 1;
 58             else ans.g[i][j] = 0;
 59         }
 60     }
 61     while (b)
 62     {
 63         if (b & 1)
 64         {
 65             ans = ans * base;
 66         }
 67         base = base * base;
 68         b >>= 1;
 69     }
 70     return ans;
 71 }
 72 int main()
 73 {
 74     matrix a, b;
 75     int c;
 76     int i, j;
 77     cin >> a.n >> a.m;
 78     for (i = 0; i < a.n; i++)
 79     {
 80         for (j = 0; j < a.m; j++)
 81         {
 82             cin >> a.g[i][j];
 83         }
 84     }
 85     for (i = 0; i < a.n; i++)
 86     {
 87         for (j = 0; j < a.m; j++)
 88         {
 89             cin >> b.g[i][j];
 90         }
 91     }
 92     b.n = b.m = a.n;
 93     matrix A = a;
 94     while (cin >> c)
 95     {
 96         a = A * pow(b, c);
 97         for (i = 0; i < a.n; i++)
 98         {
 99             for (j = 0; j < a.m; j++)
100             {
101                 cout << a.g[i][j] << ' ';
102             }
103             cout << endl;
104         }
105     }
106 }

 

posted @ 2017-08-20 20:57  Jimmy_King  阅读(144)  评论(0编辑  收藏  举报