HDU 1198

来源:互联网 发布:自动设计软件 编辑:程序博客网 时间:2024/05/17 22:34

并查集

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;char map[11][5]={"1010","1001","0110","0101","1100","0011",                 "1011","1110","0111","1101","1111"};  int a[10001],n,m;char aa[201][201];void init(){int i;for(i=0;i<=n*m;i++){a[i]=i;}}int find(int x){if(x!=a[x]){x=find(a[x]);}return x;}void un(int x,int y){x=find(x);y=find(y);if(x!=y)a[x]=y;}int main(){int i,j,k,l;while(~scanf("%d %d",&m,&n)){if(n==-1&&m==-1)break;init();for(i=0;i<m;i++){scanf("%s",&aa[i]);}for(i=0;i<m;i++){for(j=0;j<n;j++){if(map[aa[i][j]-'A'][0]=='1'&&map[aa[i-1][j]-'A'][1]=='1'&&i-1>=0)un(i*n+j,(i-1)*n+j);if(map[aa[i][j]-'A'][2]=='1'&&map[aa[i][j-1]-'A'][3]=='1'&&j-1>=0)un(i*n+j,i*n+j-1);}}int cnt=0;for(i=0;i<n*m;i++){if(a[i]==i)cnt++;}printf("%d\n",cnt);}return 0;}


0 0