LeetCode130 被圍繞的區域(和島嶼進行對比)

被圍繞的區域>>>
在這裏插入圖片描述
在這裏插入圖片描述

採用dfs:可以先遍歷幾條邊將與其相連的數據爲o的位置全部替換爲P,之後正常遍歷二維數組,將O轉爲x,將p轉爲O


package JDFS;

/**
 * @Author Zhou  jian
 * @Date 2020 ${month}  2020/5/1 0001  19:04
 * 找到所有被 'X' 圍繞的區域,並將這些區域裏所有的 'O' 用 'X' 填充。
 */
public class Problem130 {

    int[] dx = {1,-1,0,0};
    int[] dy= {0,0,1,-1};

    public void solve(char[][] board) {

        //遍歷上邊的0
        //這裏可以只遍歷四條邊,但是好像影響不大
        for(int i=0;i<board.length;i++){

            for(int j=0;j<board[0].length;j++){
                //在邊界上找到O
                if((i==0||j==0||i==board.length-1||j==board[0].length-1)&&board[i][j]=='O'){
                    dfs(board,i,j);
                }

            }

        }

        //再次遍歷數組,此時已經去除邊界的影響把O值變爲X即可
        for(int i=0;i<board.length;i++) {
            for (int j = 0; j < board[0].length; j++) {
              board[i][j] = ( board[i][j]=='K')?'O':'X';
            }

        }


    }

    /**
     *
     * @param board
     * @param col 當前行
     * @param row 當前列
     *
     *            從邊界出發,先把邊界上和O連通點找到,
     *            把這些變成B,
     *            然後遍歷整個board把o貶稱x,把b貶稱O
     */
    public void dfs(char[][] board,int col,int row){

        //將當前元素轉成'k
        board[col][row]='K';
        //上下左右查找,
        for(int i=0;i<4;i++){
            int x = col+dx[i];
            int y = row+dy[i];
            //上下左右查找,
            if((x>=0)&&(y>=0)&&(x<board.length)&&(y<board[0].length)&&board[x][y]=='O'){
              dfs(board,x,y);
            }
        }






    }






}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章