Tâche: je dois faire une méthode qui va trouver le plus grand sous-matrice carrée avec 1s en bordure et 0s à l'intérieur, de la matrice (tableau 2d) qui pourrait être carré mais n'a pas besoin d'être. Tous les éléments de la matrice sont 1 et 0.plus grand sous-matrice carrée avec des 0 à l'intérieur et de 1 à l'extérieur
C'est mon code
static void sub(int[][] p){
int sm=(p[0].length<p.length)?p[0].length:p.length;
int bg=(p[0].length<p.length)?p.length:p[0].length;
if(p.length==p[0].length){
sm=p.length;bg=p.length;
}
int t=0;
boolean cool=false;
z:for(int z=sm;z>2;z--){
x:for(int x=0,l=0;x<sm-z;x++,l++){
y:for(int y=0,m=0;y<bg-z;y++,m++){
for (int i=y;i<=z+m;i++){
if(p[x][i]!=1){cool=false; continue x;}
else cool=true;
if(p[z][i]!=1){cool=false; continue x;}
else cool=true;
}
int n=0;
for(int j=0;j<z-1;j++)
for(int i=y+1;i<z+m;i++){
if(p[x+n][i]!=0){cool=false; continue x;}
else cool=true;
if(i==z+m-1)n++;
}
for (int i=x+1;i<z+l;i++){
if(p[i][y]!=1){cool=false; continue x;}
else cool=true;
}
for(int i=x+1;i<=z-1;i++){
if(p[i][z+t]!=1) continue x;
}
if(cool){
System.out.println(x+" "+y+" "+z);
}
t++;
}
t=0;
}
}
}
public static void main(String[] args) {
int[][] p = {
{1,1,1,1,1,1,1,1,1},
{1,0,0,0,1,1,1,1,1},
{1,0,0,0,1,1,1,1,1},
{1,0,0,0,1,1,1,1,1},
{1,0,0,0,1,1,1,1,1},
{1,0,0,0,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1}
};
sub(p);
}
Variables: x et y - à partir coordonnées x et y (p [x] [y]) z - longueur de sous-matrice carrée
Où est erreur . Pourquoi je ne reçois pas ces x, y et z pour cet exemple. J'ai testé tout cela pour les boucles qu'ils prennent des éléments qu'ils devraient. Et si vous avez un conseil, un meilleur moyen que j'aimerais savoir. Merci!
Combien y a-t-il de carrés? Y a-t-il une garantie qu'il n'y aura pas de zéros à l'extérieur des cases ou à l'extérieur des frontières? – tucuxi
La seule chose qui importe est que le carré est le plus grand avec au moins un zéro à l'intérieur (entouré par ceux). Ones dans la frontière, zéro (s) à l'intérieur. Le plus grand possible –
Dans votre exemple, il existe un rectangle de 0, mais pas un carré de 0. – tucuxi