Knight Moves Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 20913 Accepted: 9702
Description
BackgroundInput
The input begins with the number n of scenarios on a single line by itself.Output
For each scenario of the input you have to calculate the minimal amount of knight moves which are necessary to move from the starting point to the ending point. If starting point and ending point are equal,distance is zero. The distance must be written on a single line.Sample Input
3 8 0 0 7 0 100 0 0 30 50 10 1 1 1 1
Sample Output
5 28 0
#include#include #include #include #define maxn 350 using namespace std; int n; int x1,x2,y1,y2; struct node{ int x; int y; int sum; node(int a,int b,int c) { x=a; y=b; sum=c; } }; int go[8][2]={{1,2},{1,-2},{2,1},{2,-1},{-1,2},{-1,-2},{-2,1},{-2,-1}}; int vis[310][310]; int BFS() { queue que; memset(vis,0,sizeof vis); que.push(node(x1,y1,0)); vis[x1][y1]=1; while(!que.empty()) { node temp=que.front(); for(int i=0;i<8;i++) { int x0=temp.x+go[i][0]; int y0=temp.y+go[i][1]; int sum0=temp.sum+1; if(x0>=0&&x0 =0&&y0