数据结构(八皇后问题)
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.这一实例使用的方法是回溯法,就是递归迭代。这个方法主要的就是,当前满足情况,则进行下一个元素;如果不满足,就继续进行当前情况的其他选项。或者直接回到上一步。
#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.这一实例使用的方法是回溯法,就是递归迭代。这个方法主要的就是,当前满足情况,则进行下一个元素;如果不满足,就继续进行当前情况的其他选项。或者直接回到上一步。
相关文章推荐
- 数据结构(c)——栈
- 我的软考之路(七)——数据结构与算法(5)之查找
- 数据结构和算法17 之拓扑排序
- 深入探索RB-tree数据结构
- Python 的数据结构
- 简单数据结构-数组实现线性表
- 【数据结构】树
- 单向链表
- 数据结构(五)位图算法
- 数据结构-Collection
- linux数据结构—链表
- 数据结构 ---- 链表
- 数据结构4.1--部分排序算法
- 用Doxygen和Graphviz给Contiki文档添加类图和调用图
- 重学数据结构系列之——八大排序算法
- 数据结构之循环链表
- 啊哈!算法【转】
- 菜鸟nginx源代码剖析数据结构篇(八) 缓冲区链表ngx_chain_t
- 数据结构--二叉树的遍历
- 数据结构算法应用C++语言描述——(1)C++基础知识