来源于国际象棋中的皇后,通常叫8皇后问题,即在一个n×n的棋盘上摆放n个皇后,使其中任意两个皇后都不同列、同行和在一条斜线上。 #include <iostream> using namespace std; #define N 4 char board[N][N]; int col[N]; //存储第i行对应的列的值,这样的(i,j)值满足当前棋盘上的皇后不能互相攻击。 bool safetyPlace(int x,int y) //(x,y)位置是否安全 { for (int i = 0; i < x; i++) { int j = col[i]; if (x == i || y == j)return false; //同一行或同一列 if (x-y == i-j || x+y == i+j)return false; //左,右对角线 } return true; } void queen(int i) //处在第i行时状态 { if (i == N) //输出棋盘 {for (int w = 0;w < N; w++) { cout << "--------------" << endl; for (int j = 0; j < N; j++) cout << '|' << " " << board[w][j]; cout << '|' << endl; } cout << endl; } else { int u; for (u = 0; u < N; u++) { if (safetyPlace(i,u) == true) { col[i] = u; //记录下第i行可行的列的位置 board[i][u] = 'Q'; //放置皇后 queen(i+1); //转换到下一个状态,即下一行 col[i] = 0; //回溯到当前状态,重置列和棋盘的值 board[i][u] = 0; } } } } int main() { queen(0); system("pause"); return 0; }