回溯法求解N皇后问题

问题描述:

在n*n格的棋盘上放置彼此不受攻击的n个皇后(按照国际象棋的规则),即任意两个皇后不能处在同一行或同一列或同一斜线上。

实现:

/*
 *回溯法,N皇后问题
 *author: [email protected]
 */
#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;
}

八皇后的求解结果:

-----------[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 * * * 
时间: 2024-10-10 06:55:20

回溯法求解N皇后问题的相关文章

回溯法求解八皇后问题---(初步、未优化)

首先介绍一下回溯算法: 定义来自<百度百科>......名字着很高大上,实际上就是试探法,逐步试错找到最终的可行解. 重要的一点是解空间通常是在搜索可行解过程中动态产生的,所以程序中通常利用到递归的算法,如后面介绍的八皇后问题.这点区别与于前段时间所写的模拟退火算法,模拟退火是首先确定解空间,然后以一定的概率接受当前发现的次优解,从而有更大的可能避免局部最优而得到全局最优. 简单介绍一下八皇后问题: 在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或

回溯法——求解N皇后问题

问题描述 八皇后问题是十九世纪著名数学家高斯于1850年提出的.问题是:在8*8的棋盘上摆放8个皇后,使其不能互相攻击,即任意的两个皇后不能处在同意行,同一列,或同意斜线上.可以把八皇后问题拓展为n皇后问题,即在n*n的棋盘上摆放n个皇后,使其任意两个皇后都不能处于同一行.同一列或同一斜线上. 问题分析 我们以最简单的4皇后问题分析,显然,为了使皇后不相互攻击,首先考虑每一行只能放一个皇后,我们以X[1,2,3-.N]代表此问题的解数组,X[N]代表在第N行第X[N]列放了一个皇后,例如,X[2

利用回溯法求解背包问题

最近看完了利用回溯法求八皇后问题,最后成功求解到92种解法,然后在看利用贪心求解背包问题,突然想到其实也可以利用回溯法求解背包问题,本质上回溯法是一个穷举的方式在求. 回溯法求解出的结果肯定是正确的,这也可以验证自己所写的贪心算法的正确性. 问题描诉: 设定Wmax为最大重量,W[](0~n-1)为编号0~n-1的货物重量,V[](0~n-1)为其价值,x[]为其中解, 在wn=ΣXi*Wi<Wmax的条件下,求Vmax=ΣXi*Vi. 代码如下: //全局变量最大价值int maxvalue=

回溯法——求解0-1背包问题

以前研究过一个简单的N皇后问题,对回溯法也有了个模糊的认识,大致理解就是:先一直做某件事,当完成某个条件时或者是触犯某个条件时,再返回到最近的一个类似还原点的地方. 在用回溯法求解0-1背包问题的时候,主要遇到三个相对难解决的问题:1,什么是界限函数:2,什么时候用它:3,回溯到哪儿. 什么是界限函数? 如下图: 当我们身在一棵搜索空间树中,站在一个K点举棋不定的时候,我们可以用它估算如果我们继续向下走,我们走完本段路会获得的总价值.假设我们现在有一个最大解,当我用界限函数算出一个价值后和我当前

回溯法求解数独算法(C语言)

没有对输入的待解数独进行一般性验证(同一行.一列以及同一个小九宫格都不能出现重复数字) 算法利用回溯的思想: 从第一个空白处开始,找到其候选解(排除同行.同列以及同一小九宫格的所有出现过的数字,剩下未出现的数字都是候选解)的第一个值填入数独. 对第二个空白执行第一步(前面所填入的数字对此空白处有影响). 当出现某个空白的候选解个数为0时,就开始回溯,找到第一个候选解多于一个的,将其在使用的候选解设为不可取(本程序取值为-1),找到其下一个候选解,继续上面的步骤! 直到所有空白处填满,运算完成,输

ACM:回溯法,八皇后问题,素数环

(一)八皇后问题 (1)回溯法 #include <iostream> #include <string> #define MAXN 100 using namespace std; int tot = 0, n = 8; int C[MAXN]; void search(int cur) { if(cur == n) ++tot; //递归边界,只要走到了这里,所有皇后必然不冲突 else for(int i = 0; i < n; ++i) { int ok = 1; C

回溯法与八皇后问题

tail recursion 函数在调用的时候,会提前创建一个栈空间,给传递的参数也分配空间,当函数结束返回上层函数的时候,一些局部变量需要从栈中弹出并恢复到调用子函数之前的值,返回到上一个函数调用子函数之前的现场.如果是尾递归,从子函数返回的时候这个函数同时也会结束了,所以没有必要恢复一些局部变量,直接把局部变量的栈空间删除.因此一个尾递归的函数根本不需要使用栈来给子函数变量空间,可以直接使用当前变量的值为新参数的值. backtracking 八皇后问题 用一个类Queens表示棋盘上现在的

算法-回溯法初探-n皇后问题

问题描述: 这周的数据结构作业要求写一个程序判断输入为n的所有皇后的情况, 皇后大致就是在一个n*n的棋盘上所有不同行列及不同对角线的格子排列 提示用书本上求解迷宫时用到的回溯法,也就是用到一个栈来保存当前满足的皇后,若进行不下去则回溯 采用C语言实现 代码: 1,文件 BetterQueen.h 里面主要定义了一些程序要用到的数据结构和函数接口 #ifndef BETTERQUEEN_H_INCLUDED #define BETTERQUEEN_H_INCLUDED #include <std

回溯法:八皇后问题

八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上.八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n.当且仅当 n = 1 或 n ≥ 4 时问题有解. 这个问题简化描述就是:在8x8的棋盘上放8颗子,要求它们[不在同一行][不在同一列][不在同一斜线]上. 我们可以定义一个数组position[8],positon