题解P1746 luogu 【离开中山路】

基础的广搜题

就是按照它的行走规矩一顿瞎搜就可以了!

记得要把队列开大点,要不然会爆炸RE。

你还可以把判重数组和地图数组放一起,走过就把那个地点标为1(反正走过一次再走一次就慢了)

#include
using namespace std;
char a[2000][2005];
int t[1111100][3];//队列大一点
int s[5]={0,-1,1,0,0};
int s1[5]={0,0,0,-1,+1};
int main()
{
	int i,j,x,y,n,x1,y1,x2,y2,head=1,tail=1;
	cin>>n;
	for (i=1;i<=n;i++)
	 for (j=1;j<=n;j++)cin>>a[i][j];
	 cin>>x1>>y1>>x2>>y2;
	t[1][1]=x1;t[1][2]=y1;
	while (t[head][1]!=x2||t[head][2]!=y2)
	{
		for (i=1;i<=4;i++)
		{
			x=t[head][1]+s[i];y=t[head][2]+s1[i];
			if (x<=n&&y<=n&&x>=1&&y>=1&&a[x][y]=='0')
            //不超过边界,没有走过,不是店铺就走
			{
				t[++tail][1]=x;t[tail][2]=y;
				a[x][y]='1';
				t[tail][0]=t[head][0]+1;
                //走动!
			}
		}
		head++;
	}
	cout<

沉迷广搜,无法自拔。。

你可能感兴趣的:(题解P1746 luogu 【离开中山路】)