
#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;
}
近期评论