#include #define MAX 205 using namespace std; struct Point { int x,y; }; struct queueNode { Point pt; int dist; }; Point source, dest; int n; bool visited[MAX][MAX]; int a[MAX][MAX]; int x[] = {-2, -2, 0, 2, 2, 0}; int y[] = {-1, 1, 2, 1, -1, -2}; string dir[] = {"UL", "UR", "R", "LR", "LL", "L"}; bool isValid(int row, int col) { return row >= 0 and row < n and col >= 0 and col < n; } int BFS() { memset(visited, false, sizeof(visited)); memset(a, 0, sizeof(a)); visited[source.x][source.y] = true; a[source.x][source.y] = 0; queue q; queueNode s = {source, 0}; q.push(s); while(!q.empty()) { queueNode curr = q.front(); Point pt = curr.pt; if(pt.x == dest.x && pt.y == dest.y) return curr.dist; q.pop(); for(int i=0; i<6; i++) { int row = pt.x + x[i]; int col = pt.y + y[i]; if(isValid(row,col) && !visited[row][col]) { visited[row][col] = true; a[row][col] = curr.dist + 1; //cout << row << " " << col << endl; queueNode Adjcell = {{row, col}, curr.dist+1}; q.push(Adjcell); } } } return INT_MAX; } int main() { // ios_base::sync_with_stdio(false); // cin.tie(NULL); cin >> n; cin >> source.x >> source.y >> dest.x >> dest.y; int dist = BFS(); if(dist != INT_MAX) { cout << dist << endl; /*for(int i=0; i