• leetcode shttps://oj.leetcode.com/problems/surrounded-regions/


    1.从外围搜索O,深度搜索出现了
    Line 35: java.lang.StackOverflowError
    Last executed input: ["OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
     1 public class Solution {
     2     public void solve(char[][] board) {
     3         if(board.length==0) return;
     4         int len1=board.length;
     5         int len2=board[0].length;
     6         for(int i=0;i<len1;i++)
     7         {
     8             if(board[i][0]=='O') dfs(board,i,0);
     9             if(board[i][len2-1]=='O') dfs(board,i,len2-1);
    10             
    11         }
    12         for(int i=0;i<len2;i++)
    13         {
    14             
    15             if(board[0][i]=='O')dfs(board,0,i);
    16             if(board[len1-1][i]=='O')dfs(board,len1-1,i);
    17         }
    18         for(int i=0;i<len1;i++)
    19         {
    20             for(int j=0;j<len2;j++)
    21             {
    22                 if(board[i][j]=='h') board[i][j]='O';
    23                 else  board[i][j]='X';
    24             }
    25         }
    26         
    27         
    28     }
    29     public void dfs(char b[][],int i,int j)
    30     {
    31         if(i<0||i>b.length-1||j<0||j>b[0].length-1) return;
    32         if(b[i][j]!='O') return;
    33         
    34           if(b[i][j]=='O') b[i][j]='h';
    35           dfs(b,i+1,j);//up
    36           dfs(b,i-1,j);//down
    37           dfs(b,i,j+1);//left
    38           dfs(b,i,j-1);//right;
    39          
    40         
    41     }
    42 }
    View Code

    2.广度搜索一定可以了。抽空在写,(可惜不行,我太水了超时代码)

    class node
    {
        int x;
        int y;
        char c;
        node(int x1,int y1,char c1)
        {
            x=x1;
            y=y1;
            c=c1;
            
        }
    }
    
    public class Solution {
        public void solve(char[][] board) {
            if(board.length==0) return;
            int len1=board.length;
            int len2=board[0].length;
            for(int i=0;i<len1;i++)
            {
                if(board[i][0]=='O') bfs(board,i,0);
                if(board[i][len2-1]=='O') bfs(board,i,len2-1);
                
            }
            for(int i=0;i<len2;i++)
            {
                
                if(board[0][i]=='O')bfs(board,0,i);
                if(board[len1-1][i]=='O')bfs(board,len1-1,i);
            }
            for(int i=0;i<len1;i++)
            {
                for(int j=0;j<len2;j++)
                {
                    if(board[i][j]=='h') board[i][j]='O';
                    else  board[i][j]='X';
                }
            }
            
            
        }
        public boolean is(int i,int j,int len1,int len2,char c[][])
        {
            if(i>=0&&i<len1&&j>=0&&j<len2&&c[i][j]=='O') return true;
            return false;
        }
            
        
        //put the o to h
        public void bfs(char b[][],int i,int j)
        {
            int len1=b.length;
            int len2=b[0].length;
            Queue<node> queue=new LinkedList<node>();
            
            queue.offer(new node(i,j,b[i][j]));
            while(!queue.isEmpty())
            {
                node n1=queue.poll();
                b[n1.x][n1.y]='h';
               
                
                if(is(n1.x,n1.y+1,len1,len2,b))
                {
                    
                    queue.offer(new node(n1.x,n1.y+1,b[n1.x][n1.y+1]));
                }
                 if(is(n1.x,n1.y-1,len1,len2,b))
                {
                    
                    
                    queue.offer(new node(n1.x,n1.y-1,b[n1.x][n1.y-1]));
                }
                 if(is(n1.x+1,n1.y,len1,len2,b))
                {
                   
                    queue.offer(new node(n1.x+1,n1.y,b[n1.x+1][n1.y]));
                }
                 if(is(n1.x-1,n1.y,len1,len2,b))
                {
                    
                    queue.offer(new node(n1.x-1,n1.y,b[n1.x-1][n1.y]));
                }
                
                
                
            }
            
            }
    
    }
  • 相关阅读:
    2020-11-15(第十一周)助教周小结
    2020-11-08(第十周)助教周小结
    2020-11-01助教周小结(第九周)
    Template.
    OO第四单元总结
    OO第三单元总结
    OO第二单元总结
    OO第一单元总结
    AFO
    Codeforces Round #424 (Div. 2)
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3840568.html
Copyright © 2020-2023  润新知