迴圈_最大正方形

user_3763047219
c_cpp
2 years ago
1.5 kB
2
Indexable
Never
```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);

}```