您的位置:首页 > 理论基础 > 数据结构算法

数据结构(八皇后问题)

2016-04-20 13:11 417 查看
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
= 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.这一实例使用的方法是回溯法,就是递归迭代。这个方法主要的就是,当前满足情况,则进行下一个元素;如果不满足,就继续进行当前情况的其他选项。或者直接回到上一步。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: