最基础的BFS了吧。。
Source Code
Problem: 1915 User: fisty
Memory: 936K Time: 141MS
Language: G++ Result: Accepted
Source Code
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
#define MAX_N 310
const int INF = 0xffff;
int d[8][2] = {{1,2},{1,-2},{2,1},{2,-1},{-1,2},{-1,-2},{-2,-1},{-2,1}};
int sx,sy;
int gx,gy;
int t, n;
int dis[MAX_N][MAX_N];
typedef pair<int, int> P;
void solve(){
queue <P> que;
for(int i = 0;i < n; i++){
for(int j = 0;j < n; j++){
dis[i][j] = INF;
}
}
que.push(P(sx,sy));
dis[sx][sy] = 0;
while(que.size()){
P p = que.front(); que.pop();
int x = p.first;
int y = p.second;
if(x == gx && y == gy) break;
for(int i = 0;i < 8; i++){
int dx = x + d[i][0];
int dy = y + d[i][1];
if(dx >= 0 && dx < n && dy < n && dy>= 0 && dis[dx][dy] == INF) {
que.push(P(dx, dy));
dis[dx][dy] = dis[x][y] + 1;
}
}
}
printf("%d\n", dis[gx][gy]);
}
int main(){
scanf("%d", &t);
while(t--){
scanf("%d", &n);
scanf("%d%d", &sx, &sy);
scanf("%d%d", &gx, &gy);
solve();
}
return 0;
}