题意:求@的堆数,只要周围没有相邻的@ 那么就算一堆。。
思路:DFS,类似于POJ解题报告里的深搜水坑数,不解释。。直接上代码。
#include<iostream>
using namespace std;
int vis[100][100];
char map[100][100];
int dir[8][2]={{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,-0}};
int m,n;
void dfs(int a,int b)
{
int ta,tb;
vis[a][b]=1;
for(int i=0;i<8;i++)
{
ta=a+dir[i][0];
tb=b+dir[i][1];
if(!vis[ta][tb]&&ta>=0&&ta<m&&tb>=0&&tb<n&&map[ta][tb]=='@')
{
vis[ta][tb]=1;
dfs(ta,tb);
}
}
return ;
}
int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
memset(vis,0,sizeof(vis));
int step=0;
if(m==0&&n==0) break;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>map[i][j];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
if(!vis[i][j]&&map[i][j]=='@')
{
dfs(i,j);
step++;
}
}
printf("%d\n",step);
}
}