#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int N=0; struct loc{ loc(){x=0;y=0;} loc(int i, int j){x=i;y=j;} bool addLegal(int a, int b, vector& arr, map& seen,loc& end, int d){ if(addIfLegal(a,b,arr,seen,end,d)) return true; if(addIfLegal(a,-b,arr,seen,end,d)) return true; if(addIfLegal(-a,b,arr,seen,end,d)) return true; if(addIfLegal(-a,-b,arr,seen,end,d)) return true; if(a!=b){ if(addIfLegal(b,a,arr,seen,end,d)) return true; if(addIfLegal(-b,a,arr,seen,end,d)) return true; if(addIfLegal(b,-a,arr,seen,end,d)) return true; if(addIfLegal(-b,-a,arr,seen,end,d)) return true; } return false; } loc(const loc& r, int a, int b){ x=r.x+a; y=r.y+b; } bool addIfLegal(int a, int b, vector&arr ,map& seen,loc& end,int d){ if((x+a)=0 && (y+b)>=0){ loc node(*this,a,b); if(node==end) return true; map::iterator it=seen.find(node); if(it==seen.end() || it->second>d){ arr.push_back(node); seen[node]=d; } } return false; } void dump(){ cout <<"Loc: "<& a, string& s){ for(int i=0;i& seen, int d, int& ma, string s) { d++; if(d>=ma) return; // seen.insert(start); vector a; if(start.addLegal(x,y,a,seen,end,d)){ if(d> n; // your code goes here N=n; loc end(n-1,n-1); for(int i=1;i s; string x=""; loc start; s[start]=0; listMoves(start,i,j,end,s,0,max,x); // cout <