题解 | 矩阵幂

矩阵幂

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

#include <stdio.h>
typedef struct {
    int a[10][10];
    int r,c;
}np;
np mul(np x,np y){//矩阵乘法
    np z;
    z.r=x.r;
    z.c=y.c;
    for(int i=0;i<x.r;i++){
        for(int j=0;j<x.r;j++){
            z.a[i][j]=0;
            for(int k=0;k<x.c;k++)
                z.a[i][j]+=x.a[i][k]*y.a[k][j];
        }
    }
    return z;
}
void print(np x){
    for(int i=0;i<x.r;i++){
        for (int j=0; j<x.c; j++) {
            if(j!=0)
                printf(" ");
            printf("%d",x.a[i][j]);
        }
    printf("\n");
    }
}

np Exp(np z,int k){
    np x;
    x.c=z.c;
    x.r=z.r;
    for(int i=0;i<z.r;i++)
        for(int j=0;j<z.c;j++)
            if(i==j)
                x.a[i][j]=1;
            else
                x.a[i][j]=0;
    while(k){
        if(k%2==1)
            x=mul(x,z);
        k/=2;
        z=mul(z, z);
    }
    return x;
}

int main() {
    int n,k;
    while(scanf("%d %d",&n,&k)!=EOF){
        np x;
        x.c=n;
        x.r=n;
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                scanf("%d",&x.a[i][j]);
        np t;
        t=Exp(x,k);
        print(t);
    }
    return 0;
}

全部评论

相关推荐

强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
05-22 17:07
已编辑
门头沟学院 Java
程序员牛肉:都啥时候了还jb打蓝桥杯呢,有限找实习。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务