为了解决蓝桥杯真题“剪格子”,需要一个Java方法:判断是否联通。

问题遇到的现象和发生背景

AcWing1206.剪格子
第四届蓝桥杯省赛JAVAA/C组真题
原题和我的思路都在https://blog.csdn.net/Hokachi/article/details/128539208

遇到的现象和发生背景,请写出第一个错误信息

我的“判断是否联通”方法有bug,不能判断下图情况。

img

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%

//判断是否相连
    public static boolean isLink(boolean[][] read){
        boolean[][] isRead = read;
        int lineNum = isRead.length - 1;
        int columnNum = isRead[0].length - 1;
        for(int i = 0; i < lineNum + 1; i++){
            for(int j = 0; j < columnNum + 1; j++){//遍历
                if(i ==0 && j ==0 && isRead[1][0] == isRead[0][1] && isRead[1][0] != isRead[0][0]){//左上角
                    return false;
                }else
                if(i == lineNum && j == 0 && isRead[lineNum - 1][0] == isRead[lineNum][1] && isRead[lineNum][1] != isRead[lineNum][0]){//左下角
                    return false;
                }else
                if(i == 0 && j == columnNum && isRead[0][columnNum - 1] == isRead[1][columnNum] && isRead[1][columnNum] != isRead[0][columnNum]){//左上角
                    return false;
                }else
                if(i == lineNum && j == columnNum && isRead[lineNum][columnNum - 1] == isRead[lineNum - 1][columnNum] && isRead[lineNum - 1][columnNum] != isRead[lineNum][columnNum]){//右下角
                    return false;
                }else
                if(i ==0 && j != 0 && j != columnNum){//上边
                    if(isRead[0][j - 1] == isRead[1][j] == isRead[0][j + 1] && isRead[0][j + 1] != isRead[i][j]){
                        return false;
                    }
                }else
                if(j == 0 && i != 0 && i != lineNum){//左边
                    if (isRead[i - 1][0] == isRead[i+1][0] == isRead[i][1] && isRead[i][1] != isRead[i][j]){
                        return false;
                    }
                }else
                if(i == lineNum && j !=0 && j != columnNum){//下边
                    if (isRead[lineNum][j - 1] == isRead[lineNum - 1][j] == isRead[lineNum][j + 1] && isRead[lineNum][j + 1] != isRead[i][j]){
                        return false;
                    }
                }else
                if (j == columnNum && i != 0 && i != lineNum){//右边
                    if(isRead[i - 1][columnNum] == isRead[i][columnNum - 1] == isRead[i + 1][columnNum]){
                        return false;
                    }
                }else if(i != 0 && i !=lineNum && j !=0 && j != columnNum){//剩余的
                    if(isRead[i - 1][j] == isRead[i + 1][j] == isRead[i][j - 1] == isRead[i][j + 1] && isRead[i][j + 1] != isRead[i][j]){
                        return false;
                    }
                    return true;
                }
            }
        }
        return false;
    }
运行结果及详细报错内容

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

https://blog.csdn.net/Hokachi/article/details/128539208

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

一个没有bug的“判断是否联通”的方法。

兄弟,还需要吗?刚出炉的Java算法篇【剪格子】