您的位置:首页 > 编程语言 > C语言/C++

八皇后问题 回溯递归 -C++

2014-08-27 15:46 288 查看
解决问题的步骤:

了解问题是否能用递归来解决
确定递归的结束条件
确定递归的执行部分

基本思路:我们采用逐步试探的方式,先从一个方向往前走,能进则进,不能进则退,尝试另外的路径。首先我们来分析一下国际象棋的规则,这些规则能够限制我们的前进,也就是我们前进途中的障碍物。



#include<iostream>
using namespace std;
#define MAX 8
int queue[8],sum=0;
void show()
{
for (int i=0;i<MAX;i++)
{
cout<<i<<':'<<queue[i]<<' ';
}
cout<<endl;
sum++;
}
int check(int n)
{
for(int i=0;i<n;i++)
{
if(queue[i]==queue
||
queue[i]-queue
==n-i||queue
-queue[i]==n-i) //判断斜率
return 1;
}
return 0;
}
void put(int n)
{
for (int i=0;i<MAX;i++)
{
queue
=i;//假设/如果没有
if (!check(n))//如果没有发生冲突
{
if(n==MAX-1)
show();
else
put(n+1);//递归
}
}
}
int main()
{
put(0);
cout<<sum<<endl;
return 0;
}



(只显示了部分结果)
回溯法(非递归版)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: