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;
}
posted @ 2020-07-25 12:25  索饮  阅读(114)  评论(0编辑  收藏  举报