回溯法求解N皇后问题
2015-02-12 15:45
281 查看
问题描述:
在n*n格的棋盘上放置彼此不受攻击的n个皇后(按照国际象棋的规则),即任意两个皇后不能处在同一行或同一列或同一斜线上。实现:
[code]/* *回溯法,N皇后问题 *author: booirror@163.com */ #include <iostream> #include <vector> #include <cmath> using namespace std; struct Point{ Point(int _x, int _y): x(_x), y(_y) {} int x; int y; }; class QueenProblem { public: QueenProblem(int _n) :n(_n){} ~QueenProblem() {} bool check(vector<Point>& vp, Point &p); void solve(); void print(); private: int n; vector<vector<Point> > vvp; }; bool QueenProblem::check(vector<Point>& vp, Point& p) { for (int i = 0; i < vp.size(); ++i) { if (vp[i].x == p.x || vp[i].y == p.y || abs(vp[i].y - p.y) == abs(vp[i].x - p.x)) return false; } return true; } void QueenProblem::solve() { vector<Point> vp; int x = 0; int y = 0; while (x >= 0) { Point point(x, y); while (point.y < n && !check(vp, point)) { point.y++; } if (point.y < n) { vp.push_back(point); if (x == n - 1) { vvp.push_back(vp); vp.pop_back(); y = point.y + 1; } else { x++; y = 0; } } else { x = x - 1; if (vp.size() > 0) { y = vp.back().y + 1; vp.pop_back(); } } } } void QueenProblem::print() { for (int i = 0; i < vvp.size(); ++i) { cout << "-----------[solution " << i + 1 << "]----------" <<endl; for (int j = 0; j < vvp[i].size(); ++j) { for (int k = 0; k < n; ++k) { if (vvp[i][j].y == k) { cout << "Q "; } else { cout << "* "; } } cout << endl; } } } void nQueen(int n) { QueenProblem problem(n); problem.solve(); problem.print(); } int main() { nQueen(8); return 0; }
八皇后的求解结果:
[code]-----------[solution 1]---------- Q * * * * * * * * * * * Q * * * * * * * * * * Q * * * * * Q * * * * Q * * * * * * * * * * * Q * * Q * * * * * * * * * Q * * * * -----------[solution 2]---------- Q * * * * * * * * * * * * Q * * * * * * * * * Q * * Q * * * * * * * * * * * Q * * * * Q * * * * * Q * * * * * * * * * * Q * * * -----------[solution 3]---------- Q * * * * * * * * * * * * * Q * * * * Q * * * * * * * * * Q * * * * * * * * * Q * Q * * * * * * * * * * Q * * * * * Q * * * * * -----------[solution 4]---------- Q * * * * * * * * * * * * * Q * * * * * Q * * * * * * * * * * Q * Q * * * * * * * * * Q * * * * * * * * * Q * * * * Q * * * * * -----------[solution 5]---------- * Q * * * * * * * * * Q * * * * * * * * * Q * * * * * * * * * Q * * Q * * * * * Q * * * * * * * * * * * * * Q * * * * * Q * * * -----------[solution 6]---------- * Q * * * * * * * * * * Q * * * * * * * * * Q * Q * * * * * * * * * Q * * * * * * * * * * * * Q * * * * * Q * * * * * Q * * * * -----------[solution 7]---------- * Q * * * * * * * * * * Q * * * * * * * * * Q * * * * Q * * * * Q * * * * * * * * * * * * * * Q * * * * * Q * * * * Q * * * * * -----------[solution 8]---------- * Q * * * * * * * * * * * Q * * Q * * * * * * * * * * * * * Q * * * * Q * * * * * * * * * * * Q * * Q * * * * * * * * * Q * * * -----------[solution 9]---------- * Q * * * * * * * * * * * Q * * * * * * * * * Q * * Q * * * * * Q * * * * * * * * * * Q * * * * * * * * * * Q * * * * * Q * * * -----------[solution 10]---------- * Q * * * * * * * * * * * * Q * * * Q * * * * * * * * * * Q * * * * * * * * * Q * * * * Q * * * Q * * * * * * * * * * Q * * * * -----------[solution 11]---------- * Q * * * * * * * * * * * * Q * * * * * Q * * * * * * * * * * Q Q * * * * * * * * * * Q * * * * * * * * * Q * * * * Q * * * * * -----------[solution 12]---------- * Q * * * * * * * * * * * * * Q * * * * * Q * * Q * * * * * * * * * Q * * * * * * * * * Q * * * * * * * * * Q * * * * Q * * * * -----------[solution 13]---------- * * Q * * * * * Q * * * * * * * * * * * * * Q * * * * * Q * * * * * * * * * * Q * Q * * * * * * * * * Q * * * * * * * * * Q * * -----------[solution 14]---------- * * Q * * * * * * * * * Q * * * * Q * * * * * * * * * * * * * Q Q * * * * * * * * * * * * * Q * * * * Q * * * * * * * * * Q * * -----------[solution 15]---------- * * Q * * * * * * * * * Q * * * * Q * * * * * * * * * * * * * Q * * * * * Q * * * * * Q * * * * * * * * * * Q * Q * * * * * * * -----------[solution 16]---------- * * Q * * * * * * * * * Q * * * * * * * * * Q * Q * * * * * * * * * * Q * * * * * Q * * * * * * * * * * * * * Q * * * * * Q * * -----------[solution 17]---------- * * Q * * * * * * * * * Q * * * * * * * * * * Q * * * Q * * * * Q * * * * * * * * * * * * * Q * * Q * * * * * * * * * * * Q * * -----------[solution 18]---------- * * Q * * * * * * * * * * Q * * * Q * * * * * * * * * * Q * * * * * * * * * * Q Q * * * * * * * * * * * * * Q * * * * Q * * * * -----------[solution 19]---------- * * Q * * * * * * * * * * Q * * * Q * * * * * * * * * * * * Q * Q * * * * * * * * * * Q * * * * * * * * * * * Q * * * * Q * * * -----------[solution 20]---------- * * Q * * * * * * * * * * Q * * * Q * * * * * * * * * * * * Q * * * * * Q * * * Q * * * * * * * * * * * * * * Q * * * Q * * * * -----------[solution 21]---------- * * Q * * * * * * * * * * Q * * * * * Q * * * * Q * * * * * * * * * * * * * * Q * * * * Q * * * * * * * * * Q * * Q * * * * * * -----------[solution 22]---------- * * Q * * * * * * * * * * Q * * * * * Q * * * * * Q * * * * * * * * * * * * * Q * * * * Q * * * * * * * * * Q * Q * * * * * * * -----------[solution 23]---------- * * Q * * * * * * * * * * Q * * * * * * * * * Q Q * * * * * * * * * * Q * * * * * * * * * * Q * * * * * Q * * * * Q * * * * * * -----------[solution 24]---------- * * Q * * * * * * * * * * Q * * * * * * * * * Q Q * * * * * * * * * * * Q * * * * * * * * * Q * * Q * * * * * * * * * Q * * * * -----------[solution 25]---------- * * Q * * * * * * * * * * Q * * * * * * * * * Q * Q * * * * * * * * * Q * * * * Q * * * * * * * * * * * * * Q * * * * * Q * * * -----------[solution 26]---------- * * Q * * * * * * * * * * * Q * * Q * * * * * * * * * * * * * Q * * * * Q * * * Q * * * * * * * * * * Q * * * * * * * * * Q * * -----------[solution 27]---------- * * Q * * * * * * * * * * * Q * * Q * * * * * * * * * * * * * Q * * * * * Q * * * * * Q * * * * Q * * * * * * * * * * * Q * * * -----------[solution 28]---------- * * Q * * * * * * * * * * * * Q * * * Q * * * * * * * * * * Q * Q * * * * * * * * * * * * Q * * * Q * * * * * * * * * * Q * * * -----------[solution 29]---------- * * * Q * * * * Q * * * * * * * * * * * Q * * * * * * * * * * Q * Q * * * * * * * * * * * * Q * * * Q * * * * * * * * * * Q * * -----------[solution 30]---------- * * * Q * * * * Q * * * * * * * * * * * Q * * * * * * * * * * Q * * * * * Q * * * * Q * * * * * * * * * * * Q * * Q * * * * * * -----------[solution 31]---------- * * * Q * * * * * Q * * * * * * * * * * Q * * * * * * * * * * Q * * * * * Q * * Q * * * * * * * * * Q * * * * * * * * * * * Q * -----------[solution 32]---------- * * * Q * * * * * Q * * * * * * * * * * * * Q * * * Q * * * * * * * * * * Q * * * * * * * * * Q Q * * * * * * * * * * * Q * * * -----------[solution 33]---------- * * * Q * * * * * Q * * * * * * * * * * * * Q * * * Q * * * * * * * * * * Q * * * * * * * * * Q * * * * Q * * * Q * * * * * * * -----------[solution 34]---------- * * * Q * * * * * Q * * * * * * * * * * * * Q * * * * * Q * * * Q * * * * * * * * * * * * * * Q * * * * * Q * * * * Q * * * * * -----------[solution 35]---------- * * * Q * * * * * Q * * * * * * * * * * * * * Q * * * * Q * * * * * * * * * Q * Q * * * * * * * * * Q * * * * * * * * * * Q * * -----------[solution 36]---------- * * * Q * * * * * Q * * * * * * * * * * * * * Q * * * * * Q * * Q * * * * * * * * * Q * * * * * * * * * Q * * * * * * * * * Q * -----------[solution 37]---------- * * * Q * * * * * * * * * Q * * Q * * * * * * * * * * * Q * * * * Q * * * * * * * * * * * * * Q * * Q * * * * * * * * * * * Q * -----------[solution 38]---------- * * * Q * * * * * * * * * Q * * * * * * * * * Q * Q * * * * * * * * * * * * Q * Q * * * * * * * * * Q * * * * * * * * * Q * * * -----------[solution 39]---------- * * * Q * * * * * * * * * Q * * * * * * * * * Q * * Q * * * * * Q * * * * * * * * * * * * * Q * * * * * Q * * * * Q * * * * * * -----------[solution 40]---------- * * * Q * * * * * * * * * * Q * Q * * * * * * * * * * * * * * Q * * * * Q * * * * Q * * * * * * * * * * * Q * * * * Q * * * * * -----------[solution 41]---------- * * * Q * * * * * * * * * * Q * * * Q * * * * * * * * * * * * Q * Q * * * * * * * * * * Q * * * Q * * * * * * * * * * * * Q * * -----------[solution 42]---------- * * * Q * * * * * * * * * * Q * * * * * Q * * * * Q * * * * * * * * * * * Q * * Q * * * * * * * * * Q * * * * * * * * * * * * Q -----------[solution 43]---------- * * * Q * * * * * * * * * * Q * * * * * Q * * * * * Q * * * * * Q * * * * * * * * * * * * Q * * * * * * * * * Q * Q * * * * * * -----------[solution 44]---------- * * * Q * * * * * * * * * * * Q Q * * * * * * * * * Q * * * * * * * * * * Q * * * Q * * * * * * * * * * * * Q * * * * * Q * * * -----------[solution 45]---------- * * * Q * * * * * * * * * * * Q Q * * * * * * * * * * * Q * * * * * * * * * Q * * Q * * * * * * * * * * * Q * * * * Q * * * * * -----------[solution 46]---------- * * * Q * * * * * * * * * * * Q * * * * Q * * * * * Q * * * * * Q * * * * * * * * * * * * * Q * * Q * * * * * * * * * * * Q * * -----------[solution 47]---------- * * * * Q * * * Q * * * * * * * * * * Q * * * * * * * * * Q * * * * * * * * * Q * Q * * * * * * * * * * * * Q * * * Q * * * * * -----------[solution 48]---------- * * * * Q * * * Q * * * * * * * * * * * * * * Q * * * Q * * * * * Q * * * * * * * * * * * * Q * * * Q * * * * * * * * * * Q * * -----------[solution 49]---------- * * * * Q * * * Q * * * * * * * * * * * * * * Q * * * * * Q * * * * Q * * * * * * * * * * * Q * * Q * * * * * * * * * Q * * * * -----------[solution 50]---------- * * * * Q * * * * Q * * * * * * * * * Q * * * * * * * * * Q * * * * * * * * * Q * * Q * * * * * Q * * * * * * * * * * * * * Q * -----------[solution 51]---------- * * * * Q * * * * Q * * * * * * * * * Q * * * * * * * * * * Q * * * Q * * * * * * * * * * * * Q * * * * * Q * * Q * * * * * * * -----------[solution 52]---------- * * * * Q * * * * Q * * * * * * * * * * * Q * * Q * * * * * * * * * * * * * Q * * * * Q * * * * * * * * * * * Q * * Q * * * * * -----------[solution 53]---------- * * * * Q * * * * Q * * * * * * * * * * * * * Q Q * * * * * * * * * * Q * * * * * * * * * * Q * * * Q * * * * * * * * * * Q * * -----------[solution 54]---------- * * * * Q * * * * * Q * * * * * Q * * * * * * * * * * * * Q * * * * * * * * * Q * Q * * * * * * * * * Q * * * * * * * * * * Q * -----------[solution 55]---------- * * * * Q * * * * * Q * * * * * Q * * * * * * * * * * * * * Q * * Q * * * * * * * * * * * * * Q * * * * * Q * * * * * Q * * * * -----------[solution 56]---------- * * * * Q * * * * * Q * * * * * * * * * * * * Q * * * Q * * * * * * * * * * Q * Q * * * * * * * * * * * * Q * * * Q * * * * * * -----------[solution 57]---------- * * * * Q * * * * * * * * * Q * Q * * * * * * * * * Q * * * * * * * * * * * * Q * * * * * Q * * * * * Q * * * * * Q * * * * * * -----------[solution 58]---------- * * * * Q * * * * * * * * * Q * Q * * * * * * * * * * Q * * * * * Q * * * * * * * * * * * * * Q * * * * * Q * * * * Q * * * * * -----------[solution 59]---------- * * * * Q * * * * * * * * * Q * * Q * * * * * * * * * Q * * * * * * * * * * * Q Q * * * * * * * * * Q * * * * * * * * * * Q * * -----------[solution 60]---------- * * * * Q * * * * * * * * * Q * * Q * * * * * * * * * * * Q * * * * Q * * * * * Q * * * * * * * * * * Q * * * * * * * * * * * Q -----------[solution 61]---------- * * * * Q * * * * * * * * * Q * * Q * * * * * * * * * * * Q * * * * Q * * * * * Q * * * * * * * * * * * * * * Q * * * Q * * * * -----------[solution 62]---------- * * * * Q * * * * * * * * * Q * * * * Q * * * * Q * * * * * * * * * Q * * * * * * * * * * * * Q * * * * * Q * * * Q * * * * * * -----------[solution 63]---------- * * * * Q * * * * * * * * * * Q * * * Q * * * * Q * * * * * * * * * Q * * * * * * * * * * Q * * * Q * * * * * * * * * * * * Q * -----------[solution 64]---------- * * * * Q * * * * * * * * * * Q * * * Q * * * * Q * * * * * * * * * * * * * Q * * Q * * * * * * * * * * * Q * * * * Q * * * * * -----------[solution 65]---------- * * * * * Q * * Q * * * * * * * * * * * Q * * * * Q * * * * * * * * * * * * * Q * * Q * * * * * * * * * * * Q * * * * Q * * * * -----------[solution 66]---------- * * * * * Q * * * Q * * * * * * * * * * * * Q * Q * * * * * * * * * Q * * * * * * * * * Q * * * * * * * * * * Q * * * Q * * * * -----------[solution 67]---------- * * * * * Q * * * Q * * * * * * * * * * * * Q * Q * * * * * * * * * * Q * * * * * * * * * * * Q * * * * Q * * * * * Q * * * * * -----------[solution 68]---------- * * * * * Q * * * * Q * * * * * Q * * * * * * * * * * * * * Q * * * * * Q * * * * * * * * * * Q * Q * * * * * * * * * Q * * * * -----------[solution 69]---------- * * * * * Q * * * * Q * * * * * Q * * * * * * * * * * * * * * Q * * * Q * * * * * Q * * * * * * * * * * * * Q * * * * * Q * * * -----------[solution 70]---------- * * * * * Q * * * * Q * * * * * Q * * * * * * * * * * * * * * Q * * * * Q * * * * Q * * * * * * * * * Q * * * * * * * * * * Q * -----------[solution 71]---------- * * * * * Q * * * * Q * * * * * * * * * Q * * * * * * * * * Q * Q * * * * * * * * * * Q * * * * * Q * * * * * * * * * * * * * Q -----------[solution 72]---------- * * * * * Q * * * * Q * * * * * * * * * Q * * * * * * * * * * Q Q * * * * * * * * * * Q * * * * * Q * * * * * * * * * * * * Q * -----------[solution 73]---------- * * * * * Q * * * * Q * * * * * * * * * * * Q * * Q * * * * * * * * * Q * * * * * * * * * * * Q Q * * * * * * * * * * * Q * * * -----------[solution 74]---------- * * * * * Q * * * * Q * * * * * * * * * * * Q * * Q * * * * * * * * * * * * * Q * * * * Q * * * Q * * * * * * * * * * Q * * * * -----------[solution 75]---------- * * * * * Q * * * * Q * * * * * * * * * * * Q * * * * Q * * * * Q * * * * * * * * * * * * * * Q * Q * * * * * * * * * * Q * * * -----------[solution 76]---------- * * * * * Q * * * * * Q * * * * Q * * * * * * * * * * * Q * * * * * * * * * * Q * Q * * * * * * * * * * * * Q * * * Q * * * * * -----------[solution 77]---------- * * * * * Q * * * * * Q * * * * * Q * * * * * * * * * * * * * Q * * * * Q * * * * * * * * * Q * Q * * * * * * * * * Q * * * * * -----------[solution 78]---------- * * * * * Q * * * * * Q * * * * * * * * * * Q * Q * * * * * * * * * Q * * * * * * * * * Q * * * * Q * * * * * * * * * * * * * Q -----------[solution 79]---------- * * * * * Q * * * * * Q * * * * * * * * * * Q * Q * * * * * * * * * * * * * * Q * Q * * * * * * * * * * Q * * * * * Q * * * * * -----------[solution 80]---------- * * * * * Q * * * * * * * * * Q * Q * * * * * * * * * Q * * * * Q * * * * * * * * * * * * * Q * * * * * Q * * * * * Q * * * * * -----------[solution 81]---------- * * * * * * Q * Q * * * * * * * * * Q * * * * * * * * * * * * Q * * * * * Q * * * * * Q * * * * * Q * * * * * * * * * * Q * * * -----------[solution 82]---------- * * * * * * Q * * Q * * * * * * * * * Q * * * * Q * * * * * * * * * * * * * * Q * * * * Q * * * * * Q * * * * * * * * * * Q * * -----------[solution 83]---------- * * * * * * Q * * Q * * * * * * * * * * * Q * * * * Q * * * * * Q * * * * * * * * * * Q * * * * * * * * * * * Q * * * * Q * * * -----------[solution 84]---------- * * * * * * Q * * * Q * * * * * Q * * * * * * * * * * * * Q * * * * * * * * * Q * * * * Q * * * * Q * * * * * * * * * Q * * * * -----------[solution 85]---------- * * * * * * Q * * * Q * * * * * * * * * * * * Q * Q * * * * * * * * * * Q * * * Q * * * * * * * * * * * * Q * * * * * Q * * * * -----------[solution 86]---------- * * * * * * Q * * * * Q * * * * * Q * * * * * * * * * * Q * * * * * * * * * * Q Q * * * * * * * * * Q * * * * * * * * * * Q * * -----------[solution 87]---------- * * * * * * Q * * * * Q * * * * * Q * * * * * * * * * * * * * Q * * * * * Q * * Q * * * * * * * * * Q * * * * * * * * * Q * * * -----------[solution 88]---------- * * * * * * Q * * * * * Q * * * * * Q * * * * * Q * * * * * * * * * * * * Q * * * * * * * * * Q * Q * * * * * * * * * Q * * * * -----------[solution 89]---------- * * * * * * * Q * Q * * * * * * * * * Q * * * * Q * * * * * * * * * * * * * Q * * * * * Q * * * * * Q * * * * * * * * * * Q * * -----------[solution 90]---------- * * * * * * * Q * Q * * * * * * * * * * Q * * * * * Q * * * * * Q * * * * * * * * * * * * * Q * * * * Q * * * * * * * * * Q * * -----------[solution 91]---------- * * * * * * * Q * * Q * * * * * Q * * * * * * * * * * * * Q * * * Q * * * * * * * * * * Q * * * * * * * * * Q * * * * Q * * * * -----------[solution 92]---------- * * * * * * * Q * * * Q * * * * Q * * * * * * * * * Q * * * * * * * * * * Q * * * Q * * * * * * * * * * * * Q * * * * * Q * * *
相关文章推荐
- 回溯法求解n皇后问题
- N皇后问题利用回溯法求解
- 回溯法求解 “n 皇后 问题”——Java 实现
- 回溯法求解N皇后问题。
- 回溯法解决N皇后问题——递归与非递归求解
- 回溯法求解N皇后问题(Java实现)
- 经典算法(1)——8皇后问题求解(回溯法)
- 回溯法求解n皇后和迷宫问题
- 经典算法(1)——8皇后问题求解(回溯法)
- 回溯法求解N皇后问题
- 用回溯法求解N皇后和迷宫问题
- 回溯法求解N-皇后问题
- 递归-回溯法求解8皇后问题(C)
- 非递归求解N皇后问题(回溯法)
- 数据结构与算法中的“递归”——用回溯法求解8皇后问题
- N皇后问题求解算法
- 用回溯法解决皇后问题的实现思考
- 回溯法求解n皇后问题
- 回溯法解决N皇后问题
- 递归求解8皇后问题