題目鏈接
代碼部分
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
#include <math.h>
#define ll long long
using namespace std;
const int maxn=52;
char maps[maxn][maxn];
int pre[maxn*maxn];
void init(int n)
{
for(int i=1; i<=n; i++)
pre[i]=i;
}
int Find(int x)
{
if(pre[x]==x)
return x;
else
return Find(pre[x]);
}
void mix(int x,int y)
{
x=Find(x);
y=Find(y);
if(x==y)
return;
pre[x]=y;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
if(n==-1&&m==-1)
break;
init(n*m);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
cin>>maps[i][j];
}
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if(j+1<=m)
{
if((maps[i][j+1]=='A'||maps[i][j+1]=='C'||maps[i][j+1]=='F'||maps[i][j+1]=='G'||maps[i][j+1]=='H'||maps[i][j+1]=='I'||maps[i][j+1]=='K')
&&(maps[i][j]=='B'||maps[i][j]=='D'||maps[i][j]=='F'||maps[i][j]=='G'||maps[i][j]=='I'||maps[i][j]=='J'||maps[i][j]=='K'))
{
mix((i-1)*m+j+1,(i-1)*m+j);
}
}
if(i+1<=n)
{
if((maps[i][j]=='C'||maps[i][j]=='D'||maps[i][j]=='E'||maps[i][j]=='H'||maps[i][j]=='I'||maps[i][j]=='J'||maps[i][j]=='K')
&&(maps[i+1][j]=='A'||maps[i+1][j]=='B'||maps[i+1][j]=='E'||maps[i+1][j]=='G'||maps[i+1][j]=='H'||maps[i+1][j]=='J'||maps[i+1][j]=='K'))
{
mix((i-1)*m+j,i*m+j);
}
}
}
}
int num=0;
for(int i=1; i<=n*m; i++)
{
if(pre[i]==i)
num++;
}
printf("%d\n",num);
}
return 0;
}