zoukankan      html  css  js  c++  java
  • hdu-1198(并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1198

    思路:

    题意是求最小的灌溉点,就是将几个相连的水田合并。可以用并查集,难点在如何用。

    首先,将初始化数组设为一维数组(这里一开始我想用二维的,可怎么也行不出来)

    建立一个二维数组,判断两个点之间是否连通(注意:只能是前一个点对应它的左边一个点和下边一个点),如果连通,就合并。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int maxn = 50;
    int n,m,ans,pre[maxn*maxn+10];
    int zz[11][4]={{1,1,0,0},{1,0,0,1},{0,1,1,0},{0,0,1,1},
                   {1,0,1,0},{0,1,0,1},{1,1,0,1},{1,1,1,0},
                   {0,1,1,1},{1,0,1,1},{1,1,1,1}
    };
    char a[maxn][maxn];
    void Init(int x)
    {
        for(int i=1;i<=x;i++) pre[i]=i;
        ans=x;
    }
    int f(int x)
    {
        if(x==pre[x]) return x;
        else
        {
            pre[x]=f(pre[x]);
            return pre[x];
        }
    }
    void Merge(int ax,int ay,int bx,int by,int xh)
    {
        if(bx>n||by>m) return ;
        int fg=0;
        int ta=a[ax][ay]-'A';
        int tb=a[bx][by]-'A';
        if(xh==1) //水平 
        {
            if(zz[ta][3]&&zz[tb][1]) fg=1;
        }
        else if(xh==2) //竖直方向 
        {
            if(zz[ta][2]&&zz[tb][0]) fg=1;
        }
        if(fg)
        {
            int t1=f((ax-1)*m+ay);
            int t2=f((bx-1)*m+by);
            if(t1!=t2)
            {
                pre[t2]=t1;
                ans--;
            }
        }
    }
    int main(void)
    {
        int i,j;
        while(~scanf("%d %d",&n,&m)&&(n+m)>0)
        {
            Init(m*n);
            for(i=1;i<=n;i++) scanf("%s",a[i]+1);
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=m;j++)
                {
                    Merge(i,j,i,j+1,1);
                    Merge(i,j,i+1,j,2);
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    SQL SERVER 和EXCEL的数据导入导出
    常用SQL语句
    ASP.NET 中 ContentType 类型
    Centos7 安装MongoDB
    Scrapy:pipeline管道的open_spider、close_spider
    pipreqs(找当前项目依赖的包)
    Docker版本Jenkins的使用
    CentOS安装nginx,部署vue项目
    centos7中安装mysql
    flask框架使用flaskmigrate进行数据库的管理,非常方便!!!
  • 原文地址:https://www.cnblogs.com/2018zxy/p/9943589.html
Copyright © 2011-2022 走看看