Go to diff to previous submission
#include <iostream> #include <vector> #include <queue> using namespace std; int dir[8][2] = {{1, 2}, {2, 1}, {2, -1}, {1, -2}, {-1, -2}, {-2, -1}, {-2, 1}, {-1, 2}}; struct point{ point(int x_, int y_){x = x_; y = y_;} int x, y; }; int main(){ int R, C, Sy, Sx, Cy, Cx; while(cin >> R >> C >> Sy >> Sx >> Cy >> Cx){ if(Sy == Cy && Sx == Cx){ cout << 0 << '\n'; continue; } vector<vector<int> > pole(C+1, vector<int> (R+1)); queue<point> Q; Q.push(point(Sx, Sy)); while(!Q.empty()){ point p = Q.front(); Q.pop(); for(int i=0; i<8; ++i){ int x = p.x + dir[i][0]; int y = p.y + dir[i][1]; if(x > 0 && x <= C && y > 0 && y <= R){ if(pole[x][y] == 0){ Q.push(point(x, y)); pole[x][y] = pole[p.x][p.y] + 1; if(x == Cx && y == Cy){ cout << pole[x][y] << '\n'; goto LOOP; } } } } } cout << "impossible\n"; LOOP:; } return 0; }