zoukankan      html  css  js  c++  java
  • [LeetCode]Surrounded Regions

    意甲冠军:会是‘X’环绕‘O’更改'X'。

    办法:从最外‘O’出发,获取连接‘O’,此‘O’最后都没有标明。过量‘O’是需要纪念。这里可以是第一从外围‘O’快速移动到‘O’标记其他人物,最后,恢复统一。法国2:也可从所有‘O’探,足,能够用一个栈保存这些中间节点。

    详细实施:bfs(用dfs会爆栈RE。

    。)

    int dir[4][2]={-1,0,1,0,0,-1,0,1};
    struct Node{
        int x,y;
    };
    class Solution {
    public:
        int n,len,m;
        Node*Q;
        void bfs(int stx,int sty,vector<vector<char> > &b){
            int front=-1,rear=-1,len=n*m;
            Node p,q;
            p.x=stx,p.y=sty;
            b[p.x][p.y]='F';
            Q[++rear]=p;
            int i,dx,dy;
            while(front!=rear){
                front=(front+1)%len;
                q=Q[front];
             //   if(b[q.x][q.y]!='O')continue;
                for(i=0;i<4;++i){
                    p.x=q.x+dir[i][0];
                    p.y=q.y+dir[i][1];
                    if(p.x<0||p.y<0||p.x>=n||p.y>=m||b[p.x][p.y]!='O')
                        continue;
                    b[p.x][p.y]='F';
                    rear=(rear+1)%len;
                    Q[rear]=p;
                }
            }
        }
        void solve(vector<vector<char> > &b) {
            if(b.size()<=0)return;
            int i,j,k;
            n=b.size();
            m=b[0].size();
            Q=new Node[n*m];
            for(i=0;i<m;++i){
                if(b[0][i]=='O')bfs(0,i,b);
                if(b[n-1][i]=='O')bfs(n-1,i,b);
            }
            for(i=1;i<n-1;++i){
                if(b[i][0]=='O')bfs(i,0,b);
                if(b[i][m-1]=='O')bfs(i,m-1,b);
            }
            for(i=0;i<n;++i){
                m=b[i].size();
                for(j=0;j<m;++j)
                {
                    if(b[i][j]=='F')b[i][j]='O';
                    else if(b[i][j]=='O')b[i][j]='X';
                }
            }
            delete[]Q;
        }
    };




    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    命名空间 和 class_exist() 问题
    浏览器中打开文件
    memcach 安装
    MySQL事务机制
    Xcode10更新报错:library not found for -lstdc++.6.0.9
    appium-chromedriver@3.0.1 npm ERR! code ELIFECYCLE npm ERR! errno 1
    npm audit fix
    使用WebStorm/IDEA上传本地项目到GitHub
    vue-cli(vue脚手架)超详细教程
    [Swift 开发] 使用闭包传值(typealias)
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4887201.html
Copyright © 2011-2022 走看看