矩阵乘法

#include<iostream>
#include<string.h>
using namespace std;

const int N = 100;

int main() {
    int m, n;
    int i, j, k;
    int A[N][N] = { 0 };
    int r[N][N] = { 0 };
    int t[N][N] = { 0 };
    scanf("%d%d", &n, &m);
    for (i = 0;i < n;i++)
        for (j = 0;j < n;j++)
            scanf("%d", &A[i][j]);
    //单位矩阵*原矩阵=原矩阵
    for (i = 0;i < n;i++) 
        r[i][i] = 1;
    while (m--) {
        memset(t, 0, sizeof(t));
        for (i = 0;i < n;i++)
            for (j = 0;j < n;j++)
                for (k = 0;k < n;k++)
                    t[i][j] += r[i][k] * A[k][j];
        for (i = 0;i < n;i++)
            for (j = 0;j < n;j++)
                r[i][j] = t[i][j];
    }

    for (i = 0;i < n;i++) {
        for (j = 0;j < n;j++) 
            printf("%d ", r[i][j]);
        printf("\n");
    }
    return 0;
}

 

其实挺简单的,就按照矩阵乘法的思路,一行的某一列做另一个矩阵的行,这样对应着乘。m--是在执行完操作后才减,and先乘一个单位矩阵是一次幂。

btw:https://www.cnblogs.com/ljy-endl/p/11411665.html

后面的fib还没看,先屯着

posted on 2020-09-22 09:28  Taurus20000519  阅读(114)  评论(0)    收藏  举报