EduCoder:人工智能导论第6章-约束满足问题
第1关:使用回溯搜索算法解决八皇后问题
回溯搜索算法:
搜索与回溯是计算机解题中常用的算法,很多问题无法根据某种确定的计算法则来求解,可以利用搜索与回溯的技术求解。
回溯是搜索算法中的一种控制策略。
基本思想是:为了求得问题的解,先选择某一种可能情况向前探索,在探索过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向前探索,如此反复进行,直至得到解或证明无解。
编程要求:
在右侧编辑器中完成void searchh(int i)函数,求出八皇后问题共有多少种算法。
预期输出:
92
代码如下:
#include<iostream>
using namespace std;
int a[9];
int b[9]={0};
int c[16]={0};
int d[16]={0};
int sum=0;
void searchh(int i)
{
for(int j=1;j<=8;j++)
{
if((!b[j])&&(!c[i+j])&&(!d[i-j+7]))//每个皇后都有八个位置(列)可以试放
{
/********** Begin **********/
if(i==8)
{
sum++;
return;
}
b[j]=1;
c[i+j]=1;
d[i-j+7]=1;
searchh(i+1);
b[j]=0;
c[i+j]=0;
d[i-j+7]=0;
/********** End **********/
}
}
}