我是靠谱客的博主 灵巧钢笔,最近开发中收集的这篇文章主要介绍note-java-bfs:surrounded-regions,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目

被围绕的区域
给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。

class Solution {
    int rows,cols;
    public void solve(char[][] board) {
          rows=board.length;
          cols=board[0].length;
        //  if(rows==0) return ;
        //  //dfs
        //  for(int i=0;i<cols;i++){
        //      dfs(0,i,board);
        //      dfs(rows-1,i,board);
        //  }
        //  for(int j=1;j<rows-1;j++){
        //      dfs(j,0,board);
        //      dfs(j,cols-1,board);
        //  }
        //   for(int i=0;i<rows;i++){
        //       for(int j=0;j<cols;j++){
        //           if(board[i][j]=='V') 
        //           board[i][j] ='O';
        //           else if(board[i][j]== 'O')
        //           board[i][j]='X';
        //       }
        //   }  

         bfs(board);   

    }
    
    void bfs(char[][] board){
        Queue<int[]> queue=new LinkedList<int[]>();

         for(int i=0;i<cols;i++){
                 if(board[0][i]=='O'){
                     queue.offer(new int[]{0,i});
                     board[0][i]='V'; 
                 }
                 if(board[rows-1][i]=='O'){
                     queue.offer(new int[]{rows-1,i});  
                     board[rows-1][i]='V';
                 }
                    
         }
         for(int j=1;j<rows-1;j++){

                if(board[j][0]=='O'){
                     queue.offer(new int[]{j,0});
                     board[j][0]='V';
                }
                if(board[j][cols-1]=='O'){
                     queue.offer(new int[]{j,cols-1});
                     board[j][cols-1]='V';
                }

                
         }
         int[][] dirs={
             {0,1},
             {0,-1},
             {1,0},
             {-1,0}
         };
         while(!queue.isEmpty()){
               int[] node=queue.poll();
               int x=node[0],y=node[1];
               for(int i=0;i<4;i++){
                    int xP=dirs[i][0],yP=dirs[i][1];
                    if(x+xP<=0||x+xP>=rows||y+yP<=0||y+yP>=cols||board[x+xP][y+yP]!='O')
                     continue;
                    queue.offer(new int[]{x+xP,y+yP});
                    board[x+xP][y+yP]='V';
               }
         }
          for(int i=0;i<rows;i++){
              for(int j=0;j<cols;j++){
                  if(board[i][j]=='V') 
                  board[i][j] ='O';
                  else if(board[i][j]== 'O')
                  board[i][j]='X';
              }
          }  
    }
    void dfs(int row,int col,char[][] board){
            if(row<0||row>=rows||col<0||col>=cols||board[row][col]!= 'O') return;
            board[row][col]='V';
            dfs(row+1,col,board);
            dfs(row-1,col,board);
            dfs(row,col+1,board);
            dfs(row,col-1,board);

    }
}

最后

以上就是灵巧钢笔为你收集整理的note-java-bfs:surrounded-regions的全部内容,希望文章能够帮你解决note-java-bfs:surrounded-regions所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部