885 搜索T1WA4-pts

#include <bits/stdc++.h>
using namespace std;
int n,m,sx,sy,ex,ey,ans=INT_MAX;
bool vis[1005][1005];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
int dx2[]=
{
	-2,-2,-2,-2,-2,
	-1,-1,-1,-1,-1,
	 0, 0, 0, 0, 0,
	 1, 1, 1, 1, 1, 
	 2, 2, 2, 2, 2
};
int dy2[]=
{
	-2,-1, 0, 1, 2,
	-2,-1, 0, 1, 2,
	-2,-1, 0, 1, 2,
	-2,-1, 0, 1, 2,
	-2,-1, 0, 1, 2,
};
struct node{int x,y,step;};
int main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>sx>>sy>>ex>>ey;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			char t;
			cin>>t;
			if(t=='#') vis[i][j]=1;
		}
	}
	deque<node> q;
	q.push_front({sx,sy,0});
	vis[sx][sy]=1;
	while(q.size())
	{
		auto t=q[0];
		q.pop_front();
		if(t.x==ex&&t.y==ey)
		{
			ans=min(ans,t.step);
			continue;
		}
		for(int i=0;i<4;i++)
		{
			int X=t.x+dx[i];
			int Y=t.y+dy[i];
			if(!(1<=X&&X<=n&&1<=Y&&Y<=m&&!vis[X][Y])) continue;
			q.push_front({X,Y,t.step});
			vis[X][Y]=1;
		}
		for(int i=0;i<25;i++)
		{
			int X=t.x+dx2[i];
			int Y=t.y+dy2[i];
			if(!(1<=X&&X<=n&&1<=Y&&Y<=m&&!vis[X][Y])) continue;
			q.push_back({X,Y,t.step+1});
			vis[X][Y]=1;
		}
	}
	if(ans==INT_MAX) ans=-1;
	cout<<ans;
	return 0;
}
/*

1	2	3	4	5
2	.	.	.	.
3	.	.	.	.
4	.	.	.	.
5	.	.	.	.





*/