网站大量收购闲置独家精品文档,联系QQ:2885784924

算法设计与分析实验报告—八皇后问题.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计与分析实验报告—八皇后问题

算法设计与分析实验报告—八皇后问题-姓名:崔明鑫学号级:软件83【问题描述】在国际象棋盘上放八个皇后,要求任一皇后吃不到别人,也不受其他皇后的攻击,求出问题的所有解。【问题分析算法设计】用8元组x[1: n]表示8后问题。其中x[ i]表示皇后i放在棋盘的第i行的第x[ i]列。由于不允许将2个皇后放在一列,所以解向量中的x[ i]互不相同。2个皇后不能放在同一斜线上是问题的隐约束。故若2个皇后放置的位置分别是(i,j)和(k,l),且i – j = k – l或i + j = k + l,则说明这2个皇后处于同一斜线上。这两个方程分别等价于i – k = j – l和i – k = l – j。由此可知,只要|i - k| = |j - l|成立,就表明2个皇后位于同一条斜线上。问题的隐约束化成了显约束。用回溯法解决8皇后问题时,用完全8叉树表示解空间。【算法实现】#include stdio.h#include math.h#include iostream.h#define N 8/* 定义棋盘大小 */staticint sum;/* 当前已找到解的个数 */staticint x[N];/* 记录皇后的位置,x[i]表示皇后i放在棋盘的第i行的第x[i]列 *//* 每找到一个解,打印当前棋盘状态 */void Show(){sum++;cout 第 sum 种情况: endl;cout 坐标为:\t;for(int k = 0; k N; k++)cout ( k+1 , x[k] ) ;cout endl;cout ---------------------------------\n;for (int i = 0; i N; i ++) {for (int j = 0; j N; j ++)if (j == x[i]) //printf(@ );cout * | ;else //printf(* );cout | ;cout \n---------------------------------\n;}}/* 确定某一位置皇后放置与否,放置则返回1,反之返回0 */int Judge(int k){// 测试皇后k在第k行第x[k]列时是否与前面已放置好的皇后相攻击。 x[j] == // x[k] 时,两皇后在同一列上;abs(k - j) == abs(x[j] - x[k]) 时,两皇 // 后在同一斜线上。两种情况两皇后都可相互攻击,故返回0表示不符合条件。for (int j = 0; j k; j ++)if (abs(k - j) == abs(x[j] - x[k]) || (x[j] == x[k])) return 0;return 1;}/* 主递归函数,有哪些信誉好的足球投注网站解空间中第i层子树 */void Backtrack(int t){/* t == N 时,算法有哪些信誉好的足球投注网站至叶结点,得到一个新的N皇后互不攻击的放置方案 */if (t == N)Show();elsefor (int i = 0; i N; i ++) {x[t] = i;if (Judge(t)) Backtrack(t + 1);}}int main(){Backtrack(0);cout endl;return 0;}【运行结果】可知在考虑对称的情况下,8皇后问题共有92种解。

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档