1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include <iostream> #include <queue> #include <cstring> using namespace std; int dx[] = {1, 2, 2, 1, -1, -2, -2, -1}, dy[] = {2, 1, -1, -2, -2, -1, 1, 2}; int t, l, x1, y1, x2, y2, cx, cy, xx, yy, arr[302][302]; queue<int> qx, qy; int main() { cin >> t; while(t--) { cin >> l >> x1 >> y1 >> x2 >> y2; arr[y1][x1] = 1; qx.push(x1), qy.push(y1); while(!qx.empty()) { cx = qx.front(); qx.pop(); cy = qy.front(); qy.pop(); for(int i = 0; i < 8; i++) { xx = cx + dx[i]; yy = cy + dy[i]; if(xx >= l || yy >= l || xx < 0 || yy < 0 || arr[yy][xx]) continue; qx.push(xx), qy.push(yy); arr[yy][xx] = arr[cy][cx] + 1; } } cout << arr[y2][x2] - 1 << endl; memset(arr, 0, sizeof(arr)); } }
|