Plus grand carré dans un rectangle
Bonjour,
Ça fait pas mal de temps que j'essaye de résoudre ce petit problème:
On dispose d'un rectangle rempli de 0 et 1 et on doit trouver le plus grand carré inclus dans ce rectangle qui ce compose de 0.
exemple:
0 0 0 1 1 1 1
0 0 0 1 1 1 1
0 0 0 1 1 1 1
1 1 1 1 1 0 0
1 1 1 1 1 0 0
reponse:3
voici mon code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #include <stdio.h>
#include <stdlib.h>
int main()
{
int x,y,i,j,l,max=1,boo=1,h;
scanf("%d %d",&x,&y);
int map[x][y];
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
scanf("%d",&map[i][j]);
}
}
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
boo=1;
if(map[i][j]==0)
{
for(h=0;h<max;h++)
{
if(i+max>=x || j+max>=y) break;
for(l=0;l<max;l++)
{
if((map[l+i+1][h+j+1]!=0 || map[l+i][h+j+1]!=0) || (map[l+i][h+j+1]!=map[h+j+1][l+i]) || (map[l+i+1][h+j+1]!=map[h+j+1][l+i+1]))
{
boo=0;
}
}
if(boo==1) max++;
}
}
}
}
printf("%d",max);
return 0;
} |
explication: pour
0 0 0 1 1 1 1
0 0 0 1 1 1 1
0 0 0 1 1 1 1
1 1 1 1 1 0 0
1 1 1 1 1 0 0
dès qu'il trouve un zéro le plus grand triangle rectangle isocèle et son symétrique remplie de 0 ici
et son symétrique c'est
Je ne sais pas pourquoi mon code ne retourne pas toujours le bon résultat par exemple pour:
1 0 0 1 0 0 1
0 0 0 0 0 0 0
1 0 0 0 0 0 0
0 0 0 0 0 0 0
0 1 0 0 0 0 1
1 0 0 0 1 0 1
il retourne 5 au lieu de 4, qu'en pensez vous?