您的位置:首页 > 其它

HDU 1312 Red and Black(BFS)

2012-06-02 15:05 501 查看
题目链接

再刷一个BFS。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char p[50][50];
int k[50][50],o1[10000],o2[10000];
int main()
{
int i,j,a,w,h,start,end;
int j1[5] = {1,-1,0,0},j2[5] = {0,0,1,-1};
while(scanf("%d%d%*c",&w,&h)!=EOF)
{
start = end = 1;
memset(k,0,sizeof(k));
if(w == 0 || h == 0)
break;
for(i = 0; i <= h-1; i ++)
gets(p[i]);
for(i = 0; i <= h-1; i ++)
for(j = 0; j <= w-1; j ++)
{
if(p[i][j] =='@')
{
o1[1] = i;
o2[1] = j;
k[i][j] = 1;
}
if(p[i][j] =='#')
{
k[i][j] = -1;
}
}
while(start <= end)
{
j = 1;
for(i = start; i <= end; i ++)
{
for(a = 0; a <=3; a ++)
{
if(o1[i]+j1[a] <= h-1 && o1[i]+j1[a]>=0 &&o2[i]+j2[a]>=0&&o2[i]+j2[a]<=w-1)
{
if(k[o1[i]+j1[a]][o2[i]+j2[a]] == 0)
{
o1[end+j] = o1[i]+j1[a];
o2[end+j] = o2[i]+j2[a];
k[o1[i]+j1[a]][o2[i]+j2[a]] = 1;
j ++;
}
}
}
}
start = end +1;
end = end + j -1;
}
printf("%d\n",end);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: