回溯法实验(n皇后问题)(迭代法).docVIP

  • 79
  • 0
  • 约5.62千字
  • 约 9页
  • 2017-07-05 发布于重庆
  • 举报
回溯法实验(n皇后问题)(迭代法)

算法分析与设计实验报告 第 三 次附加实验 姓名 学号 班级 时间 12.26上午 地点 工训楼309 实验名称 回溯法实验(n皇后问题)(迭代法) 实验目的 掌握回溯法求解问题的思想 学会利用其原理求解相关问题 实验原理 用n元组x[1:n]表示n后问题的解。其中,x[i]表示皇后i放在棋盘的第i行的第x[i]列。由于不允许将2个皇后放在同一列上,所以解向量中的x[i]互不相同。2个皇后不能放在同一斜线上是问题的隐形约束。 用回溯法解n后问题时,用完全n叉树表示解空间。可行性约束Place剪出不满足行、列和斜线约束的子树。 递归函数Backtrack(1)实现对整个解空间的回溯搜索。 Backtrack(i)搜索解空间中第i层子树。类Queen的数据成员记录解空间中结点信息,以减少传给Backtrack的参数。Sum记录当前已找到的可行方案数。 实验步骤 数组法: (1)根据n皇后问题,可以把其设想为一个数组; (2)根据n皇后的规则,可以设想为数组上同一直线,横线,斜线的数字都不能相同,由此可以得到判断条件; (3)根据判断条件之后,建立回溯点,即可解决问题。 堆栈法: 检索当前行是否可以放置一个皇后; 利用检索过程,通过递归的方式,来确定每一个皇后的位置。 关键代码 递归回溯: void Queen::Backtrack(int t) {

文档评论(0)

1亿VIP精品文档

相关文档