骑士问题

#include<iostream>  
using namespace std;
bool OK;
int chess[5][5];
int k = 1;
void solve(int i, int j, int k);
void init();


void main() {
  int i, j;
L:init();
  cout << "输入起始坐标:/t";
  cin >> i; cin >> j;
  solve(i, j, k);
  if (OK) {
    for (i = 0; i < 5; i++) {
      cout << endl << endl;
      for (j = 0; j < 5; j++) {
        cout << chess[i][j] << "/t";
      }
    }
    cout << endl << endl;
  }

  else cout << "/tNO ROADS!!/t" << endl << endl;
  goto L;
}

void init() {
  int a, b;
  OK = 0;
  //init chess.....  
  for (a = 0; a < 5; a++) {
    for (b = 0; b < 5; b++) {
      chess[a][b] = 0;
    }
  }
}

void solve(int i, int j, int k) {
  chess[i][j] = k; k++;
  if (k == 26) OK = 1;
  // eight roads  
  if (!OK&&i - 2 >= 0 && i - 2 < 5 && j - 1 >= 0 && j - 1 < 5 && chess[i - 2][j - 1] == 0 && k < 26)
  {
    solve(i - 2, j - 1, k);
  }

  if (!OK&&i - 2 >= 0 && i - 2 < 5 && j + 1 >= 0 && j + 1 < 5 && chess[i - 2][j + 1] == 0 && k < 26)
  {
    solve(i - 2, j + 1, k);
  }

  if (!OK&&i + 2 >= 0 && i + 2 < 5 && j + 1 >= 0 && j + 1 < 5 && chess[i + 2][j + 1] == 0 && k < 26)
  {
    solve(i + 2, j + 1, k);
  }

  if (!OK&&i + 2 >= 0 && i + 2 < 5 && j - 1 >= 0 && j - 1 < 5 && chess[i + 2][j - 1] == 0 && k < 26)
  {
    solve(i + 2, j - 1, k);
  }

  if (!OK&&i - 1 >= 0 && i - 1 < 5 && j + 2 >= 0 && j + 2 < 5 && chess[i - 1][j + 2] == 0 && k < 26)
  {
    solve(i - 1, j + 2, k);
  }

  if (!OK&&i - 1 >= 0 && i - 1 < 5 && j - 2 >= 0 && j - 2 < 5 && chess[i - 1][j - 2] == 0 && k < 26)
  {
    solve(i - 1, j - 2, k);
  }

  if (!OK&&i + 1 >= 0 && i + 1 < 5 && j + 2 >= 0 && j + 2 < 5 && chess[i + 1][j + 2] == 0 && k < 26)
  {
    solve(i + 1, j + 2, k);
  }

  if (!OK&&i + 1 >= 0 && i + 1 < 5 && j - 2 >= 0 && j - 2 < 5 && chess[i + 1][j - 2] == 0 && k < 26)
  {
    solve(i + 1, j - 2, k);
  }

  if (!OK) chess[i][j] = 0;

}