一道简单的广搜题:Knight Moves
这本来是要用双向宽度搜索的,但是我用简单的广搜也成功了,L<=300,也不会超时??
另外一个问题就是,我本来想用原来的代码交,结果80分??将边界条件从小于L改成小于等于L,就对了。我可能不会下棋。。。
#include<bits/stdc++.h> using namespace std; int dx[8]={1,1,2,2,-1,-1,-2,-2}; int dy[8]={2,-2,1,-1,2,-2,-1,1}; //int maxs=-1; //bool bz[100][100]; int s[400][400]; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { int i1,i2,j1,j2; memset(s,0xff,sizeof(s)); int q[100000][3]; int L; cin>>L; cin>>i1>>j1; cin>>i2>>j2; if(i2==i1&&j2==j1) { cout<<0<<endl; continue; } int head=0,tail=1; q[1][1]=i1,q[1][2]=j1,q[1][3]=0; bool f=0; while(head<tail) { head++; for(int k=0;k<8;k++) { int x=q[head][1]+dx[k]; int y=q[head][2]+dy[k]; if(x>=0&&x<=L&&y>=0&&y<=L&&s[x][y]==-1) { s[x][y]=q[head][3]+1; tail++; q[tail][1]=x; q[tail][2]=y; q[tail][3]=s[x][y]; if(s[i2][j2]>-1) { f=1; cout<<s[i2][j2]<<endl; break; } } } if(f) break; } } }