八皇后问题求解
2017-03-15 21:46
302 查看
题目
原文:Write an algorithm to print all ways of arranging eight queens on a chess board so that none of them share the same row, column or diagonal.
译文:
经典的八皇后问题,即在一个8*8的棋盘上放8个皇后,使得这8个皇后无法互相攻击( 任意2个皇后不能处于同一行,同一列或是对角线上),输出所有可能的摆放情况。
解答
#include <iostream> using namespace std; //求解八皇后问题 int que[8];//que[i]=j表示第i个皇后放到第i行第j列, int n=8;//皇后个数 int cnt = 0; void print() { for (int i = 0;i < n;i++) { for (int j = 0;j < n;j++) { if (que[i] == j) cout << 1 << " "; else cout << 0 << " "; } cout << endl; } cout << endl << endl << endl; } void search(int k)//第k个皇后放置求解 { if (k == n)//已经放置好8个了 { print(); cnt++; return; } for (int i = 0;i < n;i++)//第k个皇后放置到第i列,第k个皇后已经放到第k行了,所以不需要再考虑行的问题 { //下面判断放置到第i列是否和前面已经放置的冲突 que[k] = i; bool ok=true; for (int j = 0;j < k;j++) { if (que[j] == que[k] || abs(que[k] - que[j]) == abs(j - k)) { ok = false; break; } } if (ok) search(k + 1); } } int main() { search(0); cout << cnt << endl; }