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ć
相关产品推荐
相关产品推荐

