Задачи: мне нужно сделать метод, который будет найти самый большой квадратного подматрицы с 1s в границах и 0s внутри, от матрицы (2d массива), которые могли бы быть квадратным, но не обязательно. Все элементы матрицы - 1s и 0s.Самая большая площадь подматрицы с 0s внутри и 1s вне
Это мой код
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);
}
Переменные: х и у - от й и у координаты (р [х] [у]) г - длина квадратной подматрицы
Где ошибка , Почему я не получаю эти x, y и z для этого примера. Я проверил все это на циклы, они берут элементы, которые им нужно. И если у вас есть какие-то советы, я бы хотел узнать лучше. Благодаря!
Сколько площадей есть? есть ли какая-либо гарантия того, что не будет нулей вне квадратов или границ за пределами? – tucuxi
Единственное, что имеет значение, состоит в том, что квадрат самый большой, по крайней мере, один ноль внутри (окруженный одними). Единицы в границе, ноль (ы) внутри. Самый большой возможный. –
В вашем примере есть прямоугольник 0s, но не квадрат 0s. – tucuxi