DFS基础题。只走黑色的格子,一个格子可以走多次。求有多少个黑色格子可以走到。只需使用DFS搜索,看看有多少格子可以搜索到即可。vis数组表示格子是否已经被搜索到。当然用BFS也可。注意起始点也是一个黑色格子,不要遗漏。
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int ans,x,y;
int vis[25][25];
char m[25][25];
int dir[4][2]={0,1,0,-1,1,0,-1,0};
int BFS(int x1,int y1)
{
int nx,ny;
for(int i=0;i<4;i++)
{
nx=x1+dir[i][0];
ny=y1+dir[i][1];
if(nx<0||nx>=x||ny<0||ny>=y)
continue;
if(m[nx][ny]!='#'&&!vis[nx][ny])
{
vis[nx][ny]=1;
ans++;
BFS(nx,ny);
}
}
return 0;
}
int main()
{
while(~scanf("%d%d",&y,&x)&&x&&y)
{
int sti=0,stj=0;
ans=1;
memset(vis, 0, sizeof(vis));
getchar();
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
{
scanf("%c",&m[i][j]);
if(m[i][j]=='@')
sti=i,stj=j;
}
getchar();
}
vis[sti][stj]=1;
BFS(sti, stj);
printf("%d\n",ans);
}
return 0;
}