#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define DBG 0 using namespace std; int record; bool vector_pair_sort(pairi, pairj){ if(DBG){ cerr << "vector_pair_sort i1: " << i.first << "," << i.second << " and " << j.first << "," << j.second << " result: "; } bool ret=false; if(i.firstj.first) ret=false; else if(i.secondj.second) ret=false; if(DBG && ret==true) cerr << "TRUE" << endl; if(DBG && ret==false) cerr << "FALSE" << endl; return ret; } vector > getMoves(int a, int b){ vector > moves; moves.emplace_back(pair(a, b)); moves.emplace_back(pair(b, a)); moves.emplace_back(pair(-a, b)); moves.emplace_back(pair(b, -a)); moves.emplace_back(pair(a, -b)); moves.emplace_back(pair(-b, a)); moves.emplace_back(pair(-a, -b)); moves.emplace_back(pair(-b, -a)); sort(moves.begin(), moves.end(), vector_pair_sort); vector >::iterator it=unique(moves.begin(), moves.end()); moves.resize(distance(moves.begin(), it)); if(DBG){ cerr << " getMoves of a=" << a << " and b=" << b << ":\n"; for(int i=0; i > getValidMoves(int i, int j, vector > moves, int n){ vector > validMoves; for(int k=0; k=0 && new_i=0 && new_j(new_i, new_j)); } if(DBG){ cerr << " getValidMoves of a=" << i << " and b=" << j << ":\n"; for(int k=0; k squares, vector > moves, int n, pair cur, int depth){ int ret=-1; if(DBG) cerr << "@depth: " << depth << ", cur i:" << cur.first << ", j:" << cur.second << endl; if(cur.first==n-1 && cur.second==n-1) return depth; if(depth>=record) return -1; squares[cur.first*n+cur.second]=1; vector > validMoves = getValidMoves(cur.first, cur.second, moves, n); for(int i=0; i> n; // your code goes here vector moves(8); for(int i=0; i squares(n*n,0); vector > moves=getMoves(i+1, j+1); int min=traverse(squares, moves, n, pair(0,0), 0); cout << min << " "; } cout << endl; } return 0; }