#include<stdio.h>
#include<string.h>
int m,n;
char map[25][25];
int mark[25][25];
int to[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
struct
{
int x,y;
}queue[405],st,now,next;
int bfs()
{
int num=1;
memset(mark,0,sizeof(mark));
int fr,ed,i;
fr=ed=0;
queue[ed++]=st;
mark[st.x][st.y]=1;
while(fr<ed)
{
now=queue[fr++];
for(i=0;i<4;i++)
{
next.x=now.x+to[i][0];
next.y=now.y+to[i][1];
if(next.x<0||next.y<0||next.x>=n||next.y>=m||mark[next.x][next.y]==1||map[next.x][next.y]=='#')
{
continue;
}
num++;
mark[next.x][next.y]=1;
queue[ed++]=next;
}
}
return num;
}
int main()
{
int i,j;
while(scanf("%d%d",&m,&n)!=EOF)
{
if(m==0&&n==0)
{
break;
}
for(i=0;i<n;i++)
{
getchar();
for(j=0;j<m;j++)
{
scanf("%c",&map[i][j]);
if(map[i][j]=='@')
{
st.x=i;
st.y=j;
}
}
}
printf("%d\n",bfs());
}
}
Hdu1312 - Red and Black - 广度优先搜索
最新推荐文章于 2018-04-03 19:47:11 发布