Red and Black
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4527 Accepted Submission(s): 2945
6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#..0 0Sample Output45 59 6 13这是一道bfs的搜索题,只要按照4个方向来搜索即可。下面是代码:#include<stdio.h>
#include<stdlib.h>
#include<iostream>using namespace std;
char str[30][30];
int flag[30][30];
int count;
int w,h;
int dir[4][2]={1,0,0,-1,-1,0,0,1}; //遍历数组void bfs(int x,int y)
{
int i;
int ex,ey;
for(i=0;i<4;i++)
{
ex=x+dir[i][0];
ey=y+dir[i][1];
if(ex<0||ex>=h||ey<0||ey>=w)
continue; //记住不是break,也不是return,这里如果越界了,就返回到下一次循环
if(flag[ex][ey]==0)
{
flag[ex][ey]=1;
count++;
bfs(ex,ey);
}
}
}int main()
{
int i,l;
int sx,sy;
while(scanf("%d%d",&w,&h)!=-1)
{
if(w==0&&h==0)
break;
for(i=0;i<h;i++)
{
scanf("%s",str[i]);
for(l=0;str[i][l];l++)
{
if(str[i][l]=='@')
{
sx=i;
sy=l;
flag[i][l]=1;
}
if(str[i][l]=='.')
flag[i][l]=0;
else
flag[i][l]=1;
}
}
count=1;
bfs(sx,sy);
printf("%d\n",count);
}
return 0;
}下一篇:关于hdu1872的稳定排序