poj1915
#include<iostream> using namespace std; #define SIZE 305 int vis[SIZE][SIZE]; int sx,sy,ex,ey; int dx[8]={-1,-2,-2,-1,1,2,2,1}; int dy[8]={-2,-1,1,2,2,1,-1,-2}; int n,case_num; typedef struct node { int x; int y; int step; }node; node queue[SIZE*SIZE]; void bfs() { int head,tail; head=tail=0; node startnode; startnode.x=sx; startnode.y=sy; startnode.step=0; queue[tail++]=startnode; vis[startnode.x][startnode.y]=1; node cur,next; while(head!=tail) { int nx,ny; cur=queue[head++]; if(cur.x==ex&&cur.y==ey) { cout<<cur.step<<endl; return; } for(int i=0;i<8;i++) { nx=cur.x+dx[i]; ny=cur.y+dy[i]; if(nx>=0&&nx<n&&ny>=0&&ny<n&&vis[nx][ny]==0) { next.x=nx; next.y=ny; next.step=cur.step+1; queue[tail++]=next; vis[next.x][next.y]=1; } } } } int main() { //freopen("input.txt","r",stdin); cin>>case_num; while(case_num--) { cin>>n; cin>>sx>>sy>>ex>>ey; for(int i=0;i<n;i++) for(int j=0;j<n;j++) vis[i][j]=0; bfs(); } return 0; }