130. Surrounded Regions

来源:互联网 发布:淘宝同款图片怎么处理 编辑:程序博客网 时间:2024/05/22 01:29
//迭代层数过多导致错误class Solution {public:    void find_pool(int x,int y,vector<vector<char>>& board,int m,int n)    {        board[x][y]='A';        int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};        for(int i=0;i<4;i++)        {            int dx=x+dir[i][0];            int dy=y+dir[i][1];            if(dx>=0&&dy>=0&&dx<m&&dy<n&&board[dx][dy]=='O') find_pool(dx,dy,board,m,n);        }    }    void solve(vector<vector<char>>& board) {        if(board.size()==0) return ;        int m=board.size(),n=board[0].size();        for(int i=0;i<n;i++)        {            if(board[0][i]=='O') find_pool(0,i,board,m,n);            if(board[m-1][i]=='O') find_pool(m-1,i,board,m,n);        }        for(int i=1;i<m-1;i++)        {            if(board[i][0]=='O') find_pool(i,0,board,m,n);            if(board[i][n-1]=='O') find_pool(i,n-1,board,m,n);                    }        for(int i=0;i<m;i++)        {            for(int j=0;j<n;j++)            {                if(board[i][j]=='O') board[i][j]='X';                if(board[i][j]=='A') board[i][j]='O';            }        }    }};
//12msclass Solution {public:    void find_pool(int x,int y,vector<vector<char>>& board)    {        board[x][y]='A';        if(y+1<board[0].size()-1&&board[x][y+1]=='O') find_pool(x,y+1,board);        if(y-1>=0&&board[x][y-1]=='O')              find_pool(x,y-1,board);        if(x+1<board.size()-1&&board[x+1][y]=='O')    find_pool(x+1,y,board);        if(x-1>=0&&board[x-1][y]=='O')              find_pool(x-1,y,board);    }    void solve(vector<vector<char>>& board) {        if(board.size()==0) return ;        int m=board.size(),n=board[0].size();        for(int i=0;i<m;i++)        {            for(int j=0;j<n;j++)            {                if((i==0||j==0||i==m-1||j==n-1)&&board[i][j]=='O') find_pool(i,j,board);            }        }                for(int i=0;i<m;i++)        {            for(int j=0;j<n;j++)            {                if(board[i][j]=='O') board[i][j]='X';                else if(board[i][j]=='A') board[i][j]='O';            }        }    }};
//12msclass Solution {public:    void find_pool(int x,int y,vector<vector<char>>& board,int m,int n)    {        board[x][y]='A';        int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};        for(int i=0;i<4;i++)        {            int dx=x+dir[i][0];            int dy=y+dir[i][1];            if(dx>0&&dy>0&&dx<m-1&&dy<n-1&&board[dx][dy]=='O') find_pool(dx,dy,board,m,n);        }    }    void solve(vector<vector<char>>& board) {        if(board.size()==0) return ;        int m=board.size(),n=board[0].size();        for(int i=0;i<n;i++)        {            if(board[0][i]=='O') find_pool(0,i,board,m,n);            if(board[m-1][i]=='O') find_pool(m-1,i,board,m,n);        }        for(int i=1;i<m-1;i++)        {            if(board[i][0]=='O') find_pool(i,0,board,m,n);            if(board[i][n-1]=='O') find_pool(i,n-1,board,m,n);                    }        for(int i=0;i<m;i++)        {            for(int j=0;j<n;j++)            {                if(board[i][j]=='O') board[i][j]='X';                if(board[i][j]=='A') board[i][j]='O';            }        }    }};
0 0
原创粉丝点击