You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言最大螺旋子矩阵程序未返回预期结果求助

C语言螺旋子矩阵程序调试问题

我写的C语言程序用来返回最大螺旋子矩阵,目前遇到以下问题:

  • 输入2x2矩阵[[1,2],[4,3]]时,程序能正常返回该2x2子矩阵
  • 输入2x3矩阵[[1,2,5],[4,3,9]]时,程序仅提示无螺旋子矩阵;调试发现调用isSpiral函数判断其中的[[1,2],[4,3]]子矩阵时返回0,不符合预期

以下是完整代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string.h>

void printMat(int n, int m, int mat[n][m]);
int isSpiral(int n, int m, int mat[n][m]);
void printSpiral(int n, int m, int mat[n][m]);
void copyMat(int n, int m, int mat[n][m], int mat2[n][m]);

int main(void) {
    int n, m;
    printf("Enter number of rows and columns: \n");
    scanf("%d %d", &n, &m);
    int mat[n][m];
    printf("Enter %d elements of matrix: \n", n * m);
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            scanf("%d", &mat[i][j]);
        }
    }
    printMat(n, m, mat);
    printSpiral(n, m, mat);
    return 0;
}

void printMat(int n, int m, int mat[n][m]) {
    printf("\n");
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            printf("%5d", mat[i][j]);
        }
        printf("\n");
    }
}

int isSpiral(int n, int m, int mat[n][m]) {
    int k = 0;

        for(int i = 0; i <= n / 2 && k < n * m; i++) {

             if((i > 0) && (mat[i][i] - mat[i][i - 1] != 1))
                return 0;
            else
                k++;

            for(int j = i; j < m - 1 - i && k < n * m; j++) {
                k++;
                if(mat[i][j + 1] - mat[i][j] != 1)
                    return 0;
            }

            for(int j = i; j < n - 1 - i && k < n * m; j++) {
                k++;
                if(mat[j + 1][m - 1 - i] - mat[j][m - 1 - i] != 1)
                    return 0;
            }

            for(int j = i; j < m - 1 - i && k < n * m; j++) {
                k++;
                if(mat[n - 1 - i][j] - mat[n - 1 - i][j + 1] != 1)
                    return 0;
            }

            for(int j = i + 1; j < n - 1 - i && k < n * m; j++) {
                k++;
                if(mat[j][i] - mat[j + 1][i] != 1)
                    return 0;
            }
        }
    return 1;
}

void copyMat(int n, int m, int mat[n][m], int mat2[n][m]) {
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            mat2[i][j] = mat[i][j];
        }
    }
}

void printSpiral(int n, int m, int mat[n][m]) {
    int mat3[n][m], i2 = 0, j2 = 0;
    int maxi2 = -1, maxj2 = -1;
    int mat2[n][m];

    for(int g = n; g > 1; g--) {

        for(int f = m; f > 1; f--) {

            for(int k = 0; k < g - 1; k++) {

                for(int l = 0; l < f - 1; l++) {

                    i2 = 0;
                    for(int i = k; i < g; i++) {
                        j2 = 0;
                        for(int j = l; j < f; j++) {
                            mat2[i2][j2] = mat[i][j];
                            j2++;
                        }
                        i2++;
                    }

                if(isSpiral(i2, j2, mat2)) {
                    if(i2 >= maxi2 && j2 >= maxj2) {
                        maxi2 = i2;
                        maxj2 = j2;
                        copyMat(maxi2, maxj2, mat2, mat3);
                    }
                }
                }
            }
        }
    }

    if(maxi2 > 0 && maxj2 > 0)
        printMat(maxi2, maxj2, mat3);
    else
        printf("\nNo spiral submatrix");
}

我尝试调试但效果不佳,这是我首次提问,若格式有问题请见谅。

内容的提问来源于stack exchange,提问作者Kristijan Vuković

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:54:53