数据结构(八皇后问题)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caigaojian/article/details/51199948
1、 程序源码
#include <iostream>
using namespace std;

int line[8];//栈
int sum = 0;

void show()
{
    cout << ++sum << endl;
    int j = 0;
    for (int k = 0; k < 8; k++){
        for (int i = 0; i < 8; i++){
            if (i == line[k])
                cout << '&';
            else
                cout << '*';
        }
        cout << endl;
    }

    cout << endl << "-------------------------------------------------------------------------------" << endl;
}
bool judge(int n)
{
    int i,j;
    for (i = 0; i < n; i++){
        for (j = i + 1; j <= n; j++){
            if ((line[i] == line[j]) || (line[i] + i == line[j] + j) || (line[i] - i == line[j] - j))
                return 0;

        }
    }
    return 1;
}
//进行每一行的迭代排序
int start(int n)//n代表行
{
    for (int i = 0; i < 8; i++){
        line[n] = i;
        if (judge(n)){
            if (n == 7){
                show();
                return 0;
            }
            start(n + 1);
        }

    }
}

int main()
{
    memset(line, -1, 8);
    int n = 0;
    start(n);//第一排能有多种可能,遍历到。
    system("pause");
    return 0;
}

2、流程
    1.每一行有八种可能,要遍历每一种,每一行的情况又都一样,所以可以直接用一个for循环直接解决掉。
    2.这一实例使用的方法是回溯法,就是递归迭代。这个方法主要的就是,当前满足情况,则进行下一个元素;如果不满足,就继续进行当前情况的其他选项。或者直接回到上一步。
        



展开阅读全文

没有更多推荐了,返回首页