【YBTOJ】走迷宫

【YBTOJ】走迷宫_第1张图片

思路:

这道题是广搜模板题

c o d e code code

#include
#include
using namespace std;
int n;
int sx, sy, tx, ty;
int a[2000][2000];
int f[2000000][3];
int dx[4]={
     1, 0, -1, 0};
int dy[4]={
     0, 1, 0, -1};
bool v[2000][2000];
void bfs()
{
     
	f[1][1]=sx;
	f[1][2]=sy;
	f[1][0]=0;
	v[sx][sy]=1;
	int hd=0, tl=1;
	while(hd<tl)
	{
     
		hd++;
		for(int i=0; i<4; i++)
		{
     
			int xx=f[hd][1]+dx[i],
			    yy=f[hd][2]+dy[i];
			if(a[xx][yy]==1||xx<1||xx>n||yy<1||yy>n||v[xx][yy]==1)
				continue;
			tl++;
			f[tl][1]=xx;
			f[tl][2]=yy;
			f[tl][0]=f[hd][0]+1;
			v[xx][yy]=1;
			if(xx==tx&&yy==ty)
			{
     
				printf("%d", f[tl][0]);
				return;
			}
		}
	}
}
int main()
{
     
	scanf("%d", &n);
	for(int i=1; i<=n; i++)
		for(int j=1; j<=n; j++)
			scanf("%1d", &a[i][j]);
	scanf("%d%d%d%d", &sx,&sy,&tx,&ty);
	bfs();
	return 0;
}

你可能感兴趣的:(题解,搜索,#,BFS)