- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
法设计与分析
实验报告
—八皇后问题
姓名:崔明鑫
学号班级:软件83
【问题描述】
在国际象棋盘上放八个皇后,要求任一皇后吃不到别人,也不受其他皇后的 攻击,求出问题的所有解。
【问题分析算法设计】
用8元组x[l: n]表示8后问题。其中x[i]表示皇后i放在棋盘的第i行的第x[i] 列。由于不允许将2个皇后放在一列,所以解向量中的x[i]互不相同。2个皇后 不能放在同一斜线上是问题的隐约束。故若2个皇后放置的位置分别是(i, j) 和(k, 1),且i - j二k - 1或i + j二k + 1,则说明这2个皇后处于同一斜线上。 这两个方程分别等价于i - k = j - 1和i - k = l - jo由此可知,只要|i-k| = |j ?1|成立,就表明2个皇后位于同一条斜线上。问题的隐约束化成了显约束。用 回溯法解决8皇后问题时,用完全8叉树表示解空间。
【算法实现】
#include stdio.h
#include math.h
#include ”iostream.h
#define N 8 /*定义棋盘大小*/
static int sum; /*当前已找到解的个数*/
static intx[N]; /*记录皇后的位置Ri]表示皇后i放在棋盘的第i行的第幼]列*/
/*毎找到一个解,打印当前棋盘状态*/
void ShowO
{
sum++;
cout ? 第VV sum ? 种情况:” ? endl;
cout ? ”坐标为:\t”; forint k = 0; k N; k++)
cout? C ? k+1 ? 7 ? x[k] ? J f,;
cout? endl;
cout ? H \nn;
for (inti = 0;iN;i++)
{
for (int j = 0; j N; j ++)
if(j== xf]) 〃printfC@J;
cout ? M* I H;
else //printfC* J;
cout ? ” | ”;
cout? H\n \nu;
}
}
/*确定某一位置皇后放置与否,放置则返回1,反之返回0*/
intjudge(int k)
{
//测试皇后k在第k行第x[k]列时是否与前面已放置好的皇后相攻击。x[j]==
// x[k]时,两皇后在同一列上;abs(k - j) == abs(xO] ?x[k])时,两皇
〃后在同一斜线上。两种情况两皇后都可相互攻击,故返回0表示不符合条件。
for (int j = 0; j k; j ++)
if (abs(k ? j) == abs(xOJ ? x[k]) | | 何]==x[k]))
return 0;
return 1;
}
/*主递归函数,搜索解空间中第i层子树?/
void Backtrack(int t)
{
/* t == N时,算法搜索至叶结点,得到一个新的N皇后互不攻击的放置方案*/ if (t == N) ShowO;
else
for(inti = 0;iN;i++)
{
x[t] = i;
if (Judge?)
Backtrack(t + 1);
}
} int mainQ
Backtrack(O);
cout? endl;
return 0;
【运行结果】
*C:\Users\dragonbit^Desktop^l^^ra—算法\EIGHTQUEENS\EightQueens—递归\Debug\…[巳 j 旦
軍?2种情况:坐标为:2.2〉3,0 4,5 5,1〈6.4〉〈7,6〉〈8,3〉隼?2聊情况:坐标为二 !.? 2.3〉
軍?2种情况:
坐标为:2.2〉3,0 4,5 5,1〈6.4〉〈7,6〉〈8,3〉
隼?2聊情况:
坐标为二 !.? 2.3〉3,0 4,2 5,5〉6,1〈7,6〉〈8,4〉
Press any key to continue
可知在考虑对称的情况下,8皇后问题共有92种解。
文档评论(0)