N皇后问题的解决
2008-05-16 10:27
441 查看
来源于国际象棋中的皇后,通常叫8皇后问题,即在一个n×n的棋盘上摆放n个皇后,使其中任意两个皇后都不同列、同行和在一条斜线上。
#include <iostream> using namespace std; #define N 4 char board ; int col ; //存储第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; }
相关文章推荐
- [置顶] matlab_N皇后问题的解决
- N皇后问题 1.dfs 2.位运算解决
- 回溯法解决2n皇后(8皇后)问题
- 用python的生成器yield轻松解决8皇后的问题以及斐波拉契数列
- 数据结构用栈解决n皇后问题
- 回溯法解决N皇后问题
- 华为机试—N皇后问题(高级题160分:两种回溯法解决 吐血整理)
- php 递归函数 解决 皇后问题 速度有点慢~
- 回溯法解决N皇后问题(以四皇后为例)
- 用试探回溯法解决N皇后问题
- DFS解决n皇后问题
- 回溯法解决n皇后问题
- lv 算法与回溯法相结合解决n皇后问题
- 回溯法解决四皇后问题
- 用穷举法解决皇后问题
- 链表解决8皇后问题
- scala 解决8皇后问题
- 回溯法解决N皇后问题(以四皇后为例)
- PHP基于回溯算法解决n皇后问题的方法示例
- 用递归的方法和非递归方法解决8皇后问题