zoukankan      html  css  js  c++  java
  • LeetCode 130 Surrounded Regions

    题目 LeetCode 130

    题解:

    使用并查集解决
    AC代码(c++)

    class Solution {
    public:
        int father[100005];
        int pos[1005][1005];
        void solve(vector<vector<char>>& board) {
            
            memset(tag,0,sizeof(tag));
            for(int i=0;i<=100000;i++)
    		        father[i]=i;
    
            int p = 0;
            for(int i=0;i<board.size();i++)
            {
                for(int j=0;j<board[i].size();j++)
                {
                     if(board[i][j]=='O')
                     {
                        pos[i][j] = ++p;
             
                        if(i==board.size()-1||j==board[i].size()-1||i==0||j==0)
                        {
                            father[p] = 0;
                        }
                     }
                }
            }
            
            for(int i=0;i<board.size();i++)
            {
                for(int j=0;j<board[i].size();j++)
                {
                    if(board[i][j]=='O')
                    {
                        if(j-1>=0&&board[i][j-1] == 'O')
                        {
                            join(i,j,i,j-1);
                        }
                        if(i-1>=0&&board[i-1][j]=='O')
                        {
                            join(i,j,i-1,j);
                        }
                    }
                }
            }
            
            for(int i=0;i<board.size();i++)
            {
                for(int j=0;j<board[i].size();j++)
                {
                    if(board[i][j]=='O')
                    {
                        find(pos[i][j]);
                        if(father[pos[i][j]]!=0)
                            board[i][j] = 'X';
                    }
                }
            }
     
        }
        
        void join(int i1,int j1,int i2,int j2)
        {
            int f1 = find(pos[i1][j1]);
            int f2 = find(pos[i2][j2]);
            if(f1!=f2)
            {
                if(f1==0) father[f2] = f1;
                else if(f2==0) father[f1] = f2;
                else father[f2] =f1;
            }
        }
        
        int find(int x)
        {
            if(x!=father[x])
                father[x] = find(father[x]);
            return father[x];
        }
        
        
    };
    
  • 相关阅读:
    springboot中添加自定义filter
    一台电脑同时运行多个tomcat配置方法:
    web 后台数据交互的方式
    xml
    开发互联网应用与开发企业级应用有什么异同
    新学期目标
    换了呗项目总结
    换了呗项目
    黄金点游戏
    自我介绍
  • 原文地址:https://www.cnblogs.com/dacc123/p/9869457.html
Copyright © 2011-2022 走看看