计算矩阵的m次幂--c语言方法

问题遇到的现象和发生背景

要不就是没有输出,要不就是输出很奇怪

运行结果及报错内容

比如输入:4 1
矩阵:1 0 0 0
1 1 0 0
1 0 1 0
1 1 0 1
这个时候我这个代码运行不出来结果,但按道理应该输出原矩阵才对吧

我想要达到的结果

求矩阵的m次幂


```c
#include
#define N 100
void matrixPow(int M[N][N],int n,int m,int Result[N][N]);
int main()
{
    int i,j,n,m;
    scanf("%d %d",&n,&m);
    int x;
    int M[n][n];
    int Result[n][n];
    for(i=0;ifor(j=0;jscanf("%d",&M[i][j]);
            //Result[i][j]=0; 
        }
    }  //录入二维矩阵
    matrixPow(M,n,m,Result);
    return 0;
}

void matrixPow(int M[N][N],int n,int m,int Result[N][N])
{
    int i,j,k;
    if(m==0)  // 单位矩阵 
    {
        for(i=0;ifor(j=0;jif(i==j)
                {
                    Result[i][j]=1;
                }
                else
                {
                    Result[i][j]=0;
                }
            }
        }
    }
    else if(m==1)   // 原矩阵 
    {
        for(i=0;ifor(j=0;jelse  //  m至少从2开始 
    {
        int x=2;
        while(x<=m) // x计数 
        {
            for(i=0;ifor(j=0;jfor(k=0;kint s=0;
                        s+=M[i][k]*M[k][i]; 
                        if(s!=0)
                        {
                            Result[i][j]=1;
                        }
                        else
                            Result[i][j]=0;
                    }
                }
            }
            x++;
        }
    }
    printf("请输出矩阵:\n");
    for(i=0;ifor(j=0;jprintf("%d",Result[i][j]);
        }
    }
}

```

#include<stdio.h>
#define N 100
void matrixPow(int *M,int n,int m,int * Result);
int main()
{
    int i,j,n,m;
    scanf("%d %d",&n,&m);
    int M[n][n];
    int Result[n][n];
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&M[i][j]);
            //Result[i][j]=0; 
        }
    }  //录入二维矩阵
    
    matrixPow(&M[0][0],n,m,&Result[0][0]);
    return 0;
}
 
void matrixPow(int * M,int n,int m,int * Result)
{
    int i,j,k;
    if(m==0)  // 单位矩阵 
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(i==j)
                {
                    Result[i+j]=1;
                }
                else
                {
                    Result[i+j]=0;
                }
            }
        }
    }
    else if(m==1)   // 原矩阵 
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                Result[i+j]=M[i+j];
            }
        }
    }
    else  //  m至少从2开始 
    {
        int x=2;
        while(x<=m) // x计数 
        {
            for(i=0;i<n;i++)
            {
                for(j=0;j<n;j++)
                {
                    for(k=0;k<n;k++)
                    {
                        int s=0;
                        s+=M[i+k]*M[k+i]; 
                        if(s!=0)
                        {
                            Result[i+j]=1;
                        }
                        else
                            Result[i+j]=0;
                    }
                }
            }
            x++;
        }
    }
    printf("请输出矩阵:\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%d ",Result[i+j]);
        }
        printf("\n");
    }
}

修改如下:

#include<stdio.h>
#define N 100
void matrixPow(int M[N][N],int n,int m,int Result[N][N]);
int main()
{
    int i,j,n,m;
    scanf("%d %d",&n,&m);
    int x;
    int M[N][N];       // 
    int Result[N][N];  //
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&M[i][j]);
            //Result[i][j]=0; 
        }
    }  //录入二维矩阵
    matrixPow(M,n,m,Result);
    return 0;
}
 
void matrixPow(int M[N][N],int n,int m,int Result[N][N])
{
    int i,j,k;
    if(m==0)  // 单位矩阵 
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(i==j)
                {
                    Result[i][j]=1;
                }
                else
                {
                    Result[i][j]=0;
                }
            }
        }
    }
    else if(m==1)   // 原矩阵 
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                Result[i][j]=M[i][j];
            }
        }
    }
    else  //  m至少从2开始 
    {
        int x=2;
        while(x<=m) // x计数 
        {
            for(i=0;i<n;i++)
            {
                for(j=0;j<n;j++)
                {
                    for(k=0;k<n;k++)
                    {
                        int s=0;
                        s+=M[i][k]*M[k][i]; 
                        if(s!=0)
                        {
                            Result[i][j]=1;
                        }
                        else
                            Result[i][j]=0;
                    }
                }
            }
            x++;
        }
    }
    printf("请输出矩阵:\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%d ",Result[i][j]);
        }
        printf("\n");
    }
}
 

运行结果如图:

img