1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | #include <iostream> #include <vector> #include <iomanip> using namespace std; const int NOT_VISITED = -1; //Size of the board const int N = 8; const int N2 = N*N; typedef int chess[N][N]; struct position{ int row; int col; }; //Initializes the board and makes each and every //square value as NOT_VISITED void initializeBoard(chess &board) { for(int i=0;i<N;i++) for(int j=0;j<N;j++) board[i][j] = NOT_VISITED; } //Returns true if the square is visited; bool visited(chess &board,position square) { return board[square.row][square.col ] != NOT_VISITED; } //Returns true if the givien position variable is outside the chess board bool outsideChess(chess &board, position square) { if(square.row <N && square.col <N && square.row >=0 && square.col >=0) return false; return true; } void visitSquare(chess &board,position square,int count) { board[square.row] [square.col] = count; } void unVisitSquare(chess &board,position square) { board[square.row] [square.col] = NOT_VISITED; } position next(position square,int irow, int icol) { square.row += irow; square.col += icol; return square; } vector<position> calulateNextSquare(chess board,position square) { vector<position> list; for(int i=-2;i<3;i=i+4) { for(int j=-1;j<2;j=j+2) { list.push_back(next(square,i,j)); list.push_back(next(square,j,i)); } } return list; } bool knightTour(chess &board,position square, int count) { //cout<<count<<endl; //Base Case if the problem is solved; if(count>N2) return true; if(outsideChess(board,square)) return false; //return false if the square is already visited if(visited(board,square)) return false; visitSquare(board,square,count); // vector<position> nextSquareList = calulateNextSquare(board,square); // for(int i=0;i<nextSquareList.size();i++) if(knightTour(board, next(square, -2, -1), count+1)) return true; if(knightTour(board, next(square, -2, 1), count+1)) return true; if(knightTour(board, next(square, -1, -2), count+1)) return true; if(knightTour(board, next(square, -1, 2), count+1)) return true; if(knightTour(board, next(square, 1, -2), count+1)) return true; if(knightTour(board, next(square, 1, 2), count+1)) return true; if(knightTour(board, next(square, 2, -1), count+1)) return true; if(knightTour(board, next(square, 2, 1), count+1)) return true; unVisitSquare(board,square); return false; } void printChess(chess &board) { for(int i=0;i<N;i++) { for(int j=0;j<N;j++) cout<<setw(4)<<board[i][j]; cout<<endl; } } int main() { chess board; initializeBoard(board); position start; start.row = 0; start.col = 0; if(knightTour(board,start,1)) printChess(board); else cout<<"Not Possible"; return 0; } |
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aW9tYW5pcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IE5PVF9WSVNJVEVEID0gLTE7Ci8vU2l6ZSBvZiB0aGUgYm9hcmQKY29uc3QgaW50IE4gPSA4Owpjb25zdCBpbnQgTjIgPSBOKk47Cgp0eXBlZGVmIGludCBjaGVzc1tOXVtOXTsKCnN0cnVjdCBwb3NpdGlvbnsKICAgIGludCByb3c7CiAgICBpbnQgY29sOwp9OwoKLy9Jbml0aWFsaXplcyB0aGUgYm9hcmQgYW5kIG1ha2VzIGVhY2ggYW5kIGV2ZXJ5Ci8vc3F1YXJlIHZhbHVlIGFzIE5PVF9WSVNJVEVECnZvaWQgaW5pdGlhbGl6ZUJvYXJkKGNoZXNzICZib2FyZCkKewogICAgZm9yKGludCBpPTA7aTxOO2krKykKICAgICAgICBmb3IoaW50IGo9MDtqPE47aisrKQogICAgICAgICAgICBib2FyZFtpXVtqXSA9IE5PVF9WSVNJVEVEOwp9CgovL1JldHVybnMgdHJ1ZSBpZiB0aGUgc3F1YXJlIGlzIHZpc2l0ZWQ7CmJvb2wgdmlzaXRlZChjaGVzcyAmYm9hcmQscG9zaXRpb24gc3F1YXJlKQp7CiAgICByZXR1cm4gYm9hcmRbc3F1YXJlLnJvd11bc3F1YXJlLmNvbCBdICE9IE5PVF9WSVNJVEVEOwp9CgovL1JldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2aWVuIHBvc2l0aW9uIHZhcmlhYmxlIGlzIG91dHNpZGUgdGhlIGNoZXNzIGJvYXJkCmJvb2wgb3V0c2lkZUNoZXNzKGNoZXNzICZib2FyZCwgcG9zaXRpb24gc3F1YXJlKQp7CiAgICBpZihzcXVhcmUucm93IDxOICYmIHNxdWFyZS5jb2wgPE4gJiYgc3F1YXJlLnJvdyA+PTAgJiYgc3F1YXJlLmNvbCA+PTApCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7Cn0KCnZvaWQgdmlzaXRTcXVhcmUoY2hlc3MgJmJvYXJkLHBvc2l0aW9uIHNxdWFyZSxpbnQgY291bnQpCnsKICAgIGJvYXJkW3NxdWFyZS5yb3ddIFtzcXVhcmUuY29sXSA9IGNvdW50Owp9Cgp2b2lkIHVuVmlzaXRTcXVhcmUoY2hlc3MgJmJvYXJkLHBvc2l0aW9uIHNxdWFyZSkKewogICAgYm9hcmRbc3F1YXJlLnJvd10gW3NxdWFyZS5jb2xdID0gTk9UX1ZJU0lURUQ7Cn0KCnBvc2l0aW9uIG5leHQocG9zaXRpb24gc3F1YXJlLGludCBpcm93LCBpbnQgaWNvbCkKewogICAgc3F1YXJlLnJvdyArPSBpcm93OwogICAgc3F1YXJlLmNvbCArPSBpY29sOwogICAgcmV0dXJuIHNxdWFyZTsKfQp2ZWN0b3I8cG9zaXRpb24+IGNhbHVsYXRlTmV4dFNxdWFyZShjaGVzcyBib2FyZCxwb3NpdGlvbiBzcXVhcmUpCnsKICAgIHZlY3Rvcjxwb3NpdGlvbj4gbGlzdDsKICAgIGZvcihpbnQgaT0tMjtpPDM7aT1pKzQpCiAgICB7CiAgICAgICAgZm9yKGludCBqPS0xO2o8MjtqPWorMikKICAgICAgICB7CiAgICAgICAgICAgIGxpc3QucHVzaF9iYWNrKG5leHQoc3F1YXJlLGksaikpOwogICAgICAgICAgICBsaXN0LnB1c2hfYmFjayhuZXh0KHNxdWFyZSxqLGkpKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gbGlzdDsKCn0KCmJvb2wga25pZ2h0VG91cihjaGVzcyAmYm9hcmQscG9zaXRpb24gc3F1YXJlLCBpbnQgY291bnQpCnsKICAgIC8vY291dDw8Y291bnQ8PGVuZGw7CiAgICAvL0Jhc2UgQ2FzZSBpZiB0aGUgcHJvYmxlbSBpcyBzb2x2ZWQ7CiAgICBpZihjb3VudD5OMikKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmKG91dHNpZGVDaGVzcyhib2FyZCxzcXVhcmUpKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIC8vcmV0dXJuIGZhbHNlIGlmIHRoZSBzcXVhcmUgaXMgYWxyZWFkeSB2aXNpdGVkCiAgICBpZih2aXNpdGVkKGJvYXJkLHNxdWFyZSkpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgdmlzaXRTcXVhcmUoYm9hcmQsc3F1YXJlLGNvdW50KTsKLy8gICAgdmVjdG9yPHBvc2l0aW9uPiBuZXh0U3F1YXJlTGlzdCA9IGNhbHVsYXRlTmV4dFNxdWFyZShib2FyZCxzcXVhcmUpOyAKLy8gICAgZm9yKGludCBpPTA7aTxuZXh0U3F1YXJlTGlzdC5zaXplKCk7aSsrKQogICAgICAgIGlmKGtuaWdodFRvdXIoYm9hcmQsIG5leHQoc3F1YXJlLCAtMiwgLTEpLCBjb3VudCsxKSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYoa25pZ2h0VG91cihib2FyZCwgbmV4dChzcXVhcmUsIC0yLCAxKSwgY291bnQrMSkpCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmKGtuaWdodFRvdXIoYm9hcmQsIG5leHQoc3F1YXJlLCAtMSwgLTIpLCBjb3VudCsxKSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYoa25pZ2h0VG91cihib2FyZCwgbmV4dChzcXVhcmUsIC0xLCAyKSwgY291bnQrMSkpCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmKGtuaWdodFRvdXIoYm9hcmQsIG5leHQoc3F1YXJlLCAxLCAtMiksIGNvdW50KzEpKQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZihrbmlnaHRUb3VyKGJvYXJkLCBuZXh0KHNxdWFyZSwgMSwgMiksIGNvdW50KzEpKQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZihrbmlnaHRUb3VyKGJvYXJkLCBuZXh0KHNxdWFyZSwgMiwgLTEpLCBjb3VudCsxKSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYoa25pZ2h0VG91cihib2FyZCwgbmV4dChzcXVhcmUsIDIsIDEpLCBjb3VudCsxKSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICB1blZpc2l0U3F1YXJlKGJvYXJkLHNxdWFyZSk7CiAgICByZXR1cm4gZmFsc2U7Cn0KCgp2b2lkIHByaW50Q2hlc3MoY2hlc3MgJmJvYXJkKQp7CiAgICBmb3IoaW50IGk9MDtpPE47aSsrKQogICAgewogICAgICAgIGZvcihpbnQgaj0wO2o8TjtqKyspCiAgICAgICAgICAgIGNvdXQ8PHNldHcoNCk8PGJvYXJkW2ldW2pdOwogICAgICAgIGNvdXQ8PGVuZGw7CiAgICB9Cn0KCgppbnQgbWFpbigpCnsKICAgIGNoZXNzIGJvYXJkOwogICAgaW5pdGlhbGl6ZUJvYXJkKGJvYXJkKTsKICAgIHBvc2l0aW9uIHN0YXJ0OwogICAgc3RhcnQucm93ID0gMDsgc3RhcnQuY29sID0gMDsKICAgIGlmKGtuaWdodFRvdXIoYm9hcmQsc3RhcnQsMSkpCiAgICAgICAgcHJpbnRDaGVzcyhib2FyZCk7CiAgICBlbHNlCiAgICAgICAgY291dDw8Ik5vdCBQb3NzaWJsZSI7CiAgICByZXR1cm4gMDsKfQ==
-
upload with new input
-
result: Success time: 1.33s memory: 2728 kB returned value: 0
1 12 9 6 3 14 17 20 10 7 2 13 18 21 4 15 31 28 11 8 5 16 19 22 64 25 32 29 36 23 48 45 33 30 27 24 49 46 37 58 26 63 52 35 40 57 44 47 53 34 61 50 55 42 59 38 62 51 54 41 60 39 56 43


