这题做了几小时,怪自己粗心
注意题目给出的最后一组数据M后面多了一个空格,不要直接复制,我就是直接复制过来写成文件调试,坑死了
#include <iostream>
#include <cstdio>
#include <cstring>
//#define test
using namespace std;
char vis[105][105];
int cnt;
int M,N;
int dir[8][2] = {{0,1},{1,0},{-1,0},{0,-1},{1,1},{-1,1},{1,-1},{-1,-1}};
void dfs(int x,int y)
{
vis[x][y]='*';
//printf("%d %d\n",x,y);
int xx,yy;
for(int i=0; i<8; i++)
{
xx=x+dir[i][0];
yy=y+dir[i][1];
if(xx>M||yy>N||xx<1||yy<1||vis[xx][yy]=='*')
continue;
if(vis[xx][yy]=='@')
dfs(xx,yy);
}
return;
}
int main()
{
//fp=fopen("out.txt","w");
while(scanf("%d %d",&M,&N)!=EOF)
{
getchar();
if(M==0||N==0)
break;
for(int i=1; i<=M; i++)
{
for(int j=1; j<=N; j++)
scanf("%c",&vis[i][j]);
getchar();//get the char '\n'
}
#ifdef test
for(int i=1; i<=M; i++)
{
for(int j=1; j<=N; j++)
printf("%c",vis[i][j]);
printf("\n");
}
#endif
cnt=0;
for(int i=1; i<=M; i++)
for(int j=1; j<=N; j++)
if(vis[i][j]=='@')
{
cnt++;
dfs(i,j);
}
printf("%d\n",cnt);
//memset(vis,0,sizeof(vis));
}
return 0;
}