水题一道。简单的搜索题,用的深搜,这个题可以用深搜,广搜,并查集。不过我用的深搜,直接水过。
原题地址:点击打开.
代码如下:
#include<stdio.h>
char map[101][101];
int n,m;
int tab[8][2] =
{ -1, -1, -1, 0, -1,
1,0, -1, 0, 1,
1, -1, 1, 0, 1, 1} ;
void dfs(int a,int b)
{
int i,x,y;
for(i=0;i<8;i++)
{
map[a][b]='*';
x=a+tab[i][0];
y=b+tab[i][1];
if(x<0||x>=n||y<0||y>=m||map[x][y]!='@')
continue;
dfs(x,y);
}
}
int main()
{
int i,j;
while(1)
{ int count=0;
scanf("%d%d",&n,&m);
if(m==0&&n==0)break;
for(i=0;i<n;i++)
scanf("%s%*c",map[i]);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(map[i][j]=='@')
{
count++;
dfs(i,j);
}
printf("%d\n",count);
}return 0;
}