迴圈_最大正方形

 avatar
user_3763047219
c_cpp
3 years ago
1.5 kB
7
Indexable
void findMaximalSquare(int** matrix, int rows, int cols, int* maxEdge);



void findMaximalSquare(int** matrix, int rows, int cols, int* maxEdge) {
    if (rows >= 1 && cols >= 1) {
        int a = matrix[rows ][cols];
        int b = matrix[rows - 1][cols];
        int c = matrix[rows][cols-1];
        int d = matrix[rows-1][cols - 1];
        if (a == b && a==c && a==d &&a!=0) {
            matrix[rows-1][cols-1]= matrix[rows][cols-1]+1;
            if (*maxEdge < matrix[rows-1][cols-1]) {
                *maxEdge = matrix[rows-1][cols-1];
            }
            findMaximalSquare(matrix, rows - 1, cols-1, maxEdge);
        }
        else {
            findMaximalSquare(matrix, rows - 1, cols, maxEdge);
            findMaximalSquare(matrix, rows, cols - 1, maxEdge);
        }
    }

}

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


int main() {
    int row, col;
    scanf("%d %d", &row, &col);
    int** matrix = (int**)malloc(row * sizeof(int*));
    int i, j, tmp;
    for (i = 0; i < row; i++) {
        matrix[i] = (int*)malloc(col * sizeof(int));
    }
    for (i = 0; i < row; i++) {
        for (j = 0; j < col; j++) {
            scanf("%d", &tmp);
            matrix[i][j] = tmp;
        }
    }

    int maxEdge = 0;
    findMaximalSquare(matrix, row - 1, col - 1, &maxEdge);

    printf("%d", maxEdge * maxEdge);
    for (i = 0; i < row; i++) {
        free(matrix[i]);
    }
    free(matrix);

}
Editor is loading...