题目: http://poj.grids.cn/problem/1915/ 代码: #include<iostream> using namespace std; int n,l; int a,b,c,d; int move[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}}; int visited[310][310]; int queue[100000][2]; int num; void bfs(int x,int y) { int head=0; int tail=1; queue[0][0]=x;queue[0][1]=y; visited[x][y]=1; num=0; while (head<tail) { int temp=tail; for(int k=head;k<tail;k++) { if (queue[k][0]==c&&queue[k][1]==d) {cout<<num<<endl; return; } for (int i=0;i<8;i++) { int s=queue[k][0]+move[i][0],t=queue[k][1]+move[i][1]; if(s<0||s>l-1||t<0||t>l-1)continue; if (!visited[s][t]) { visited[s][t]=1; queue[temp][0]=s,queue[temp][1]=t;temp++; } } } head=tail;tail=temp; num++; } } int main() { cin>>n; while(n--) { cin>>l>>a>>b>>c>>d; memset(visited,0,sizeof(visited)); bfs(a,b); } //system("pause"); return 0; }