#include #include #include #include #include #include #include using namespace std; #define MAX 201 #define MAX_MOVE 2000 int n = MAX; bool isPathExists = false; int minMoveCount = INT_MAX; int seq[MAX_MOVE]; int inde = 0; int ans[MAX_MOVE]; int lastIndex = -1; //UL, UR, R, LR, LL, L //1, 2, 3, 4, 5, 6 //bool isVisited[MAX][MAX]; int isVisited[MAX][MAX]; void findMinRedKnightPath(int cX, int cY, int dX, int dY, int cnt){ if(cX == dX && cY == dY){ //cout<<"Final - "< cnt){ //cout<<"min"; minMoveCount = cnt; for(int i=0; i=0 && (cY-1)>=0 && isVisited[cX-2][cY-1]>(cnt+1)){//!isVisited[cX-2][cY-1]){ isVisited[cX-2][cY-1] = cnt+1;//true; seq[inde++] = 1; findMinRedKnightPath(cX-2, cY-1, dX, dY, cnt+1); /*if(cX-2 == dX && cY-1 == dY){ isVisited[cX-2][cY-1] = false; }*/ //isVisited[cX-2][cY-1] = false; inde--; } if((cX-2)>=0 && (cY+1)(cnt+1)){//!isVisited[cX-2][cY+1]){ isVisited[cX-2][cY+1] = cnt+1;//true; seq[inde++] = 2; findMinRedKnightPath(cX-2, cY+1, dX, dY, cnt+1); /*if(cX-2 == dX && cY+1 == dY){ isVisited[cX-2][cY+1] = false; }*/ //isVisited[cX-2][cY+1] = false; inde--; } if((cY+2)(cnt+1)){//!isVisited[cX][cY+2]){ isVisited[cX][cY+2] = cnt+1;//true; seq[inde++] = 3; findMinRedKnightPath(cX, cY+2, dX, dY, cnt+1); /*if(cX == dX && cY+2 == dY){ isVisited[cX][cY+2] = false; }*/ //isVisited[cX][cY+2] = false; inde--; } if((cX+2)(cnt+1)){//!isVisited[cX+2][cY+1]){ isVisited[cX+2][cY+1] = cnt+1;//true; seq[inde++] = 4; findMinRedKnightPath(cX+2, cY+1, dX, dY, cnt+1); /*if(cX+2 == dX && cY+1 == dY){ isVisited[cX+2][cY+1] = false; }*/ //isVisited[cX+2][cY+1] = false; inde--; } if((cX+2)=0 && isVisited[cX+2][cY-1]>(cnt+1)){//!isVisited[cX+2][cY-1]){ isVisited[cX+2][cY-1] = cnt+1;//true; seq[inde++] = 5; findMinRedKnightPath(cX+2, cY-1, dX, dY, cnt+1); /*if(cX+2 == dX && cY-1 == dY){ isVisited[cX+2][cY-1] = false; }*/ //isVisited[cX+2][cY-1] = false; inde--; } if((cY-2)>=0 && isVisited[cX][cY-2]>(cnt+1)){//!isVisited[cX][cY-2]){ isVisited[cX][cY-2] = cnt+1;//true; seq[inde++] = 6; findMinRedKnightPath(cX, cY-2, dX, dY, cnt+1); /*if(cX == dX && cY-2 == dY){ isVisited[cX][cY-2] = false; }*/ //isVisited[cX][cY-2] = false; inde--; } } } int main() { cin>>n; int x1, y1, x2, y2; cin>>x1>>y1>>x2>>y2; //vector isVisited[n]; //memset(isVisited, false, n*n); //memset(isVisited, n*n, n*n); for(int ii=0;ii