v 0. Pasted by slipstak2 as cpp at 2015-01-23 05:35:20 MSK and set expiration to never.

Paste will expire never.

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. const int SIZE = 5;
  8. int mas[SIZE][SIZE];
  9. bool usd[SIZE][SIZE];
  10. vector<int> steps;
  11. int moveX[8] = {-2,-2,-1,-1,1,1,2,2};
  12. int moveY[8] = {-1,1,-2,2,-2,2,-1,1};
  13. int code(int x, int y) {
  14.     return x * SIZE + y;
  15. }
  16. void uncode(int val, char& x, char& y) {
  17.     x = 'A' + val / SIZE;
  18.     y = '1' + val % SIZE;
  19. }
  20. bool correct(int x, int y) {
  21.     if (x < 0 || y < 0) return false;
  22.     if (x >= SIZE || y >= SIZE) return false;
  23.     return true;
  24. }
  25. bool go(int x, int y, int cnt, string& ans) {
  26.     if (cnt == 0) {
  27.         char x,y;
  28.         for (size_t i=0;i<steps.size();++i) {
  29.             uncode(steps[i],x,y);
  30.             ans += x;
  31.             ans += y;
  32.         }
  33.         return true;
  34.     }
  35.     usd[x][y] = true;
  36.     for (int i = 0; i < 8; ++i) {
  37.         int nx = x + moveX[i];
  38.         int ny = y + moveY[i];
  39.         if (correct(nx, ny) && !usd[nx][ny]) {
  40.             usd[nx][ny] = true;
  41.             steps.push_back(code(nx,ny));
  42.             if (go(nx,ny,cnt-1,ans)) {
  43.                 return true;
  44.             }
  45.             steps.pop_back();
  46.             usd[nx][ny] = false;
  47.         }
  48.     }
  49.     return false;
  50. }
  51. int main() {
  52. #ifdef _DEBUG
  53.     freopen("input.txt","r",stdin);
  54.     freopen("output.txt","w",stdout);
  55. #endif
  56.  
  57.     char beg[2 + 1];
  58.     cin>>beg;
  59.     int begX = beg[0] - 'A';
  60.     int begY = beg[1] - '1';
  61.     string ans = "";
  62.     steps.push_back(code(begX, begY));
  63.     cout<<(go(begX, begY, SIZE*SIZE-1, ans) ? ans : "0");
  64.  
  65.     return 0;
  66. }


Editing is locked.