#include<bits/stdc++.h>
using namespace std;
int n, m;
int start_x, start_y, target_x, target_y;
bool visited[20][20] = {false}; // 标记已访问的位置
int min_steps = INT_MAX; // 记录最小步数
// 马的8个移动方向(dx, dy)
int dx[8] = {2, 1, -1, -2, -2, -1, 1, 2};
int dy[8] = {1, 2, 2, 1, -1, -2, -2, -1};
// 深度优先搜索函数,当前位置(x, y),当前步数steps
void dfs(int x, int y, int steps) {
// 如果到达目标位置,更新最小步数
if (x == target_x && y == target_y) {
if (steps < min_steps) {
min_steps = steps;
}
return;
}
// 尝试8个方向的移动
for (int i = 0; i < 8; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
// 检查新位置是否在棋盘内且未被访问
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && !visited[nx][ny]) {
visited[nx][ny] = true; // 标记为已访问
dfs(nx, ny, steps + 1); // 递归搜索,步数加1
visited[nx][ny] = false; // 回溯,取消标记
}
}
}
int main() {
cin >> n >> m >> start_x >> start_y >> target_x >> target_y;
// 标记初始位置为已访问
visited[start_x][start_y] = true;
// 从初始位置开始搜索,初始步数为0
dfs(start_x, start_y, 0);
cout << min_steps << endl;
return 0;
}
/**************************************************************
Problem: 1438
User: zhengzihao
Language: C++
Result: Accepted
Time:46 ms
Memory:2072 kb
****************************************************************/