任务:我需要创建一个方法,从可能是正方形但不需要的矩阵(二维数组)中找到最大的正方形子矩阵,边界为 1,内部为0 。矩阵的所有元素都是 1 和 0。
这是我的代码
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 - 起始 x 和 y 坐标 (p[x][y]) z - 方形子矩阵的长度
哪里错了。为什么我在这个例子中没有得到那些 x、y 和 z。我已经测试了所有这些 for 循环,它们采用了应有的元素。如果你有一些建议,我想知道一些更好的方法。谢谢!