#include<stdio.h>
#include<string.h>
int m,n;
int p[3000];
struct
{
int up,down,left,right;
}map[55][55];
int find(int n)
{
return p[n]==n?p[n]:find(p[n]);
}
int main()
{
int i,j;
char item;
while(scanf("%d%d",&m,&n)!=EOF)
{
memset(map,0,sizeof(map));
if(m==-1&&n==-1)
{
break;
}
getchar();
for(i=1;i<3000;i++)
{
p[i]=i;
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
item=getchar();
if(item=='A')
{
map[i][j].left=map[i][j].up=1;
}
else if(item=='B')
{
map[i][j].right=map[i][j].up=1;
}
else if(item=='C')
{
map[i][j].left=map[i][j].down=1;
}
else if(item=='D')
{
map[i][j].right=map[i][j].down=1;
}
else if(item=='E')
{
map[i][j].down=map[i][j].up=1;
}
else if(item=='F')
{
map[i][j].left=map[i][j].right=1;
}
else if(item=='G')
{
map[i][j].left=map[i][j].up=map[i][j].right=1;
}
else if(item=='H')
{
map[i][j].left=map[i][j].up=map[i][j].down=1;
}
else if(item=='I')
{
map[i][j].left=map[i][j].right=map[i][j].down=1;
}
else if(item=='J')
{
map[i][j].right=map[i][j].down=map[i][j].up=1;
}
else if(item=='K')
{
map[i][j].left=map[i][j].up=map[i][j].right=map[i][j].down=1;
}
}
getchar();
}
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(map[i][j].up==1&&map[i-1][j].down==1)
{
int a=find((i-1)*n+j);
int b=find((i-2)*n+j);
if(a!=b)
{
p[a]=b;
}
}
if(map[i][j].left==1&&map[i][j-1].right==1)
{
int a=find((i-1)*n+j);
int b=find((i-1)*n+j-1);
if(a!=b)
{
p[a]=b;
}
}
if(map[i][j].down==1&&map[i+1][j].up==1)
{
int a=find((i-1)*n+j);
int b=find(i*n+j);
if(a!=b)
{
p[a]=b;
}
}
if(map[i][j].right==1&&map[i][j+1].left==1)
{
int a=find((i-1)*n+j);
int b=find((i-1)*n+j+1);
if(a!=b)
{
p[a]=b;
}
}
}
}
int count=0;
for(i=1;i<=n*m;i++)
{
if(p[i]==i)
{
count++;
}
}
printf("%d\n",count);
}
}
Hdu1198 - Farm Irrigation - 并查集
最新推荐文章于 2020-08-17 15:18:11 发布