骑士周游
#include <iostream> #include <iomanip> using namespace std; #define N 6 int a[N][N] = { 0 }; bool judge(int a[][N], int b, int c, int dir) { if (dir == 0) { if (b - 2 >= 0 && c - 1 >= 0 && a[b - 2][c - 1] == 0) { return true; } else { return false; } } if (dir == 1) { if (b - 1 >= 0 && c - 2 >= 0 && a[b - 1][c - 2] == 0) { return true; } else { return false; } } if (dir == 2) { if (b - 2 >= 0 && c + 1 <= N-1 && a[b - 2][c + 1] == 0) { return true; } else { return false; } } if (dir == 3) { if (b - 1 >= 0 && c + 2 <= N-1 && a[b - 1][c + 2] == 0) { return true; } else { return false; } } if (dir == 4) { if (b + 2 <= N-1 && c - 1 >= 0 && a[b + 2][c - 1] == 0) { return true; } else { return false; } } if (dir == 5) { if (b + 1 <= N-1 && c - 2 >= 0 && a[b + 1][c - 2] == 0) { return true; } else { return false; } } if (dir == 6) { if (b + 2 <= N-1 && c + 1 <= N-1 && a[b + 2][c + 1] == 0) { return true; } else { return false; } } if (dir == 7) { //cout << "dir = 7\n"; if (b + 1 <= N-1 && c + 2 <= N-1 && a[b + 1][c + 2] == 0) { return true; } else { return false; } } } void print() { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { cout << setw(5) << a[i][j] ; } cout << endl; } } int count1 = 1; int count2 = 1; void fun(int a[][N],int b,int c) { if (count1 == N*N ) { print(); cout << "方案:" << count2++ << endl; cout << endl; system("pause"); } else { for (int i = 0; i < 8; i++) { if (judge(a, b, c, i)) { switch (i) { case 0: count1++; a[b - 2][c - 1] = count1; fun(a, b - 2, c - 1); a[b - 2][c - 1] = 0; count1--; break; case 1: count1++; a[b - 1][c - 2] = count1; fun(a, b - 1, c - 2); a[b - 1][c - 2] = 0; count1--; break; case 2: count1++; a[b - 2][c + 1] = count1; fun(a, b - 2, c + 1); a[b - 2][c + 1] = 0; count1--; break; case 3: count1++; a[b - 1][c + 2] = count1; fun(a, b - 1, c + 2); a[b - 1][c + 2] = 0; count1--; break; case 4: count1++; a[b + 2][c - 1] = count1; fun(a, b + 2, c - 1); a[b + 2][c - 1] = 0; count1--; break; case 5: count1++; a[b + 1][c - 2] = count1; fun(a, b + 1, c - 2); a[b + 1][c - 2] = 0; count1--; break; case 6: count1++; a[b + 2][c + 1] = count1; fun(a, b + 2, c + 1); a[b + 2][c + 1] = 0; count1--; break; case 7: count1++; a[b + 1][c + 2] = count1; fun(a, b + 1, c + 2); a[b + 1][c + 2] = 0; count1--; break; } } } } } void main() { a[2][0] = 1; fun(a, 2, 0); system("pause"); }