标签:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
char a[55][55];
int pd[2505];
struct node
{
int l;
int r;
int u;
int d;
int num;
}que[55][55];
int get(int x)
{
if(pd[x]!=x)
pd[x]=get(pd[x]);
return pd[x];
}
void find(int x,int y)
{
pd[get(y)]=get(x);
}
int main()
{
int m,n;
while(scanf("%d%d",&m,&n)!=EOF)
{
if(m==-1&&n==-1)
break;
if(m==1&&n==1)
{
printf("1\n");
continue;
}
memset(pd,0,sizeof(pd));
memset(a,0,sizeof(a));
int N=n*m;
for(int i1=1;i1<=N;i1++)
pd[i1]=i1;
getchar();
for(int i2=0;i2<m;i2++)
{
for(int j2=0;j2<n;j2++)
scanf("%c",&a[i2][j2]);
getchar();
}
int h=1;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
if(a[i][j]==‘A‘) {que[i][j].l=1;que[i][j].r=0;que[i][j].u=1;que[i][j].d=0;}
else if(a[i][j]==‘B‘) {que[i][j].l=0;que[i][j].r=1;que[i][j].u=1;que[i][j].d=0;}
else if(a[i][j]==‘C‘) {que[i][j].l=1;que[i][j].r=0;que[i][j].u=0;que[i][j].d=1;}
else if(a[i][j]==‘D‘) {que[i][j].l=0;que[i][j].r=1;que[i][j].u=0;que[i][j].d=1;}
else if(a[i][j]==‘E‘) {que[i][j].l=0;que[i][j].r=0;que[i][j].u=1;que[i][j].d=1;}
else if(a[i][j]==‘F‘) {que[i][j].l=1;que[i][j].r=1;que[i][j].u=0;que[i][j].d=0;}
else if(a[i][j]==‘G‘) {que[i][j].l=1;que[i][j].r=1;que[i][j].u=1;que[i][j].d=0;}
else if(a[i][j]==‘H‘) {que[i][j].l=1;que[i][j].r=0;que[i][j].u=1;que[i][j].d=1;}
else if(a[i][j]==‘I‘) {que[i][j].l=1;que[i][j].r=1;que[i][j].u=0;que[i][j].d=1;}
else if(a[i][j]==‘J‘) {que[i][j].l=0;que[i][j].r=1;que[i][j].u=1;que[i][j].d=1;}
else {que[i][j].l=1;que[i][j].r=1;que[i][j].u=1;que[i][j].d=1;}
que[i][j].num=h;
h++;
}
for(int i3=0;i3<m;i3++)
for(int j3=0;j3<n;j3++)
{
if(j3<n-1)
{
if(que[i3][j3].r==1&&que[i3][j3+1].l==1)
find(que[i3][j3].num,que[i3][j3+1].num);
}
if(i3<m-1)
{
if(que[i3][j3].d==1&&que[i3+1][j3].u==1)
find(que[i3][j3].num,que[i3+1][j3].num);
}
}
int sum=0;
for(int i4=1;i4<=N;i4++)
{
if(pd[i4]==i4)
sum++;
}
printf("%d\n",sum);
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/13224ACMer/p/4393346.html