这本来是要用双向宽度搜索的,但是我用简单的广搜也成功了,L<=300,也不会超时??

另外一个问题就是,我本来想用原来的代码交,结果80分??将边界条件从小于L改成小于等于L,就对了。我可能不会下棋。。。

#include<bits/stdc++.h>
using namespace std;
int dx[]={,,,,-,-,-,-};
int dy[]={,-,,-,,-,-,};
//int maxs=-1;
//bool bz[100][100];
int s[][];
int main()
{
int n;
cin>>n;
for(int i=;i<=n;i++)
{
int i1,i2,j1,j2;
memset(s,0xff,sizeof(s));
int q[][];
int L;
cin>>L;
cin>>i1>>j1;
cin>>i2>>j2;
if(i2==i1&&j2==j1)
{
cout<<<<endl;
continue;
}
int head=,tail=;
q[][]=i1,q[][]=j1,q[][]=;
bool f=;
while(head<tail)
{
head++;
for(int k=;k<;k++)
{
int x=q[head][]+dx[k];
int y=q[head][]+dy[k];
if(x>=&&x<=L&&y>=&&y<=L&&s[x][y]==-)
{
s[x][y]=q[head][]+;
tail++;
q[tail][]=x;
q[tail][]=y;
q[tail][]=s[x][y];
if(s[i2][j2]>-)
{
f=;
cout<<s[i2][j2]<<endl;
break;
}
}
}
if(f) break;
}
} }
05-11 22:23