N皇后-动态输出回溯过程

效果:

N皇后-动态输出回溯过程_第1张图片

N皇后-动态输出回溯过程_第2张图片N皇后-动态输出回溯过程_第3张图片N皇后-动态输出回溯过程_第4张图片N皇后-动态输出回溯过程_第5张图片N皇后-动态输出回溯过程_第6张图片N皇后-动态输出回溯过程_第7张图片N皇后-动态输出回溯过程_第8张图片N皇后-动态输出回溯过程_第9张图片N皇后-动态输出回溯过程_第10张图片N皇后-动态输出回溯过程_第11张图片N皇后-动态输出回溯过程_第12张图片N皇后-动态输出回溯过程_第13张图片

N皇后-动态输出回溯过程_第14张图片

 

N皇后-动态输出回溯过程_第15张图片N皇后-动态输出回溯过程_第16张图片N皇后-动态输出回溯过程_第17张图片

代码:

#include 
#include 
#include 
#include 
using namespace std;

class Queen{
private:
    int n=4;        //棋盘大小
    vector x;         //解空间
    int sum=0;      //解个数
    vector > result;
public:
    Queen(){};
    Queen(int k);
    ~Queen(){};
    bool Place(int k);          //判断第k行的放置方法是否合法
    void Back_track(int t);     //寻找解
    void print_result();           //输出解的个数
    void print(vector x,int t);
};
void Queen::print(vector x,int t)
{
    int row;
	int col;
	for(row=0; row 0)
    {
        cout<<"结果分别为:"<= n)    //当要判断的行数超过棋盘大小时,证明前面n行的棋盘是合法的
    {
        sum++;
        result.push_back(x);
        cout<= 0 && x[t-1] == n-1)
                    {
                        cout<<",上一行的位置已经是最后一个位置,回溯到再上一行的下一个位置"<>i)
    {
        Queen Q(i);
        Q.Back_track(0);
        Q.print_result();
        cout<<"请输入棋盘大小:";
    }
    return 0;
}

 

你可能感兴趣的:(算法分析)