cf540C
题目大意:
给你一个地图,只不过是在冰面上,冰面每块只能走一次,问到达目的地的时候是否可以掉下去。X是洞,.是可以走一次的冰路。
先是输入n,m,这是地图的行列,然后输入地图,最后输入起始点和目的点坐标。
思路:宽搜BFS,最基本的,没什么技巧。由于是宽搜只走一次,所以book[]也可以不要了,走过后直接把.变成X。
代码:
#include <stdio.h>
#include <string.h>
int x1,y1,x2,y2,n,m;
char map[510][510];
int to[4][2]= {1,0,0,1,0,-1,-1,0};
int f;
struct L
{
int x,y;
} pp[250100];
void bfs()
{
int tx,ty,head=1,tail=1,i,j;
pp[tail].x=x1;
pp[tail].y=y1;
tail++;
while(head<tail)
{
for (i=0; i<4; i++)
{
tx=pp[head].x+to[i][0];
ty=pp[head].y+to[i][1];
if (tx==x2&&ty==y2&&map[tx][ty]=='X')
{
f=1;
break;
}
if (tx>=0&&tx<n&&ty>=0&&ty<m&&map[tx][ty]=='.')
{
map[tx][ty]='X';
pp[tail].x=tx;
pp[tail].y=ty;
tail++;
}
}
if (f)
break;
head++;
}
}
int main()
{
int i,j;
f=0;
memset(map,0,sizeof(map));
scanf("%d %d",&n,&m);
for (i=0; i<n; i++)
{
scanf("%s",map[i]);
}
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
x1--,x2--,y1--,y2--;
bfs();
if (f==1)
printf("YES\n");
else
printf("NO\n");
return 0;
}