题解 | 矩阵幂 矩阵快速幂

矩阵幂

https://www.nowcoder.com/practice/31e539ab08f949a8bece2a7503e9319a

#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>
#include <iostream>

using namespace std;

const int maxn = 10;
struct Matrix {
    int row, col;
    int matrix[maxn][maxn];
    Matrix() {};
    Matrix(int r, int c) : row(r), col(c) {}
};
Matrix multuply(Matrix x, Matrix y) {
    Matrix answer = Matrix(x.row, y.col);
    for (int i = 0; i < x.row; i++) {
        for (int j = 0; j < y.col; j++) {
            answer.matrix[i][j] = 0;
            for (int k = 0; k < x.col; k++) {
                answer.matrix[i][j] += x.matrix[i][k] * y.matrix[k][j];
            }
        }
    }
    return answer;
}
void printmatrix(Matrix answer) {
    for (int i = 0; i < answer.row; i++) {
        for (int j = 0; j < answer.col; j++) {
            if(j!=0){
                printf(" ");//每行最后一个数后面不应该有多余的空格
            }
            printf("%d", answer.matrix[i][j]);
        }
        printf("\n");
    }
}

Matrix fastexp(Matrix x, int k) {
    Matrix answer(x.row, x.col);
    for (int i = 0; i < x.row; i++) {
        for (int j = 0; j < x.col; j++) {
            if (i == j) {
                answer.matrix[i][j] = 1;

            } else {
                answer.matrix[i][j] = 0;
            }
        }
    }          //类比 int answer =1;
    while (k != 0) {
        if (k % 2 == 1) {
            //answer*=x.matrix;
            answer = multuply(answer, x);
        }
        k /= 2;
        x = multuply(x, x);
    }
    return answer;

}

int main() {
    
    int n, k;
    while (scanf("%d%d", &n, &k) != EOF) {
        Matrix x(n, n);
        for (int i = 0; i < n; i++) {
            for (int j = 0; j <n; j++) {
                scanf("%d", &x.matrix[i][j]);
            }
           
        }
         Matrix answer =fastexp(x,  k);
         printmatrix( answer);

    }
    return 0;
}

矩阵与矩阵快速幂 文章被收录于专栏

数学问题中另外一个常考的知识点是矩阵。考查的内容不难,一般只考查矩阵的基本运算, 如矩阵加法、矩阵乘法、矩阵转置等。通常,可用一个二维数组来模拟矩阵 类似于普通快速幂,矩阵的快速幂就是高效求矩阵多幂次的方法,其思想和普通快速幂的 思想相同。唯一不同的地方在于,对数字的快速幂而言,其初始值是1;而对于矩阵快速幂而 言,其初始值是单位矩阵

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务