已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
算法设计与分析实验报告实验名称: 用回溯法解决八皇后问题 姓 名: 学 号: 江 苏 科 技 大 学一、实验名称:回溯法求解8皇后问题二、学习知识:回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。回溯法是一个既带有系统性又带有跳跃性的搜索算法。它在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解的空间树。算法搜索至解的空间树的任一结点时,总是先判断该结点是否肯定不包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的系统搜索,逐层向其祖先结点回溯。否则,进入该子树,继续按深度优先的策略进行搜索。回溯法在用来求问题的所有解时,要回溯到根,且根结点的所有子树都已被搜索遍才结束。而回溯法在用来求问题的任一解时,只要搜索到问题的一个解就可以结束。这种以深度优先的方式系统地搜索问题的解的算法称为回溯法,它适用于解一些组合数较大的问题。三、问题描述(1)使用回溯法解决八皇后问题。8皇后问题:在8*8格的棋盘上放置彼此不受攻击的8个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。8后问题等价于在8*8格的棋盘上放置8个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。(2)用高级程序设计语言实现四、求解思路Procedure PLACE(k)/如果一个皇后能放在第k行和X(k)列,则返回true,否则返回false。X是一个全程数组,进入此过程时已置入了k个值。ABS(r)过程返回r的绝对值/global X(1:k); integer i,k;i1while i0 do / 对所有的行,执行以下语句 /X(k)X(k)+1 /移到下一列/while X(k)=n and Not PLACE(k) do /此处能放这个皇后吗/X(k)X(k)+1 /不能放则转到下一列/repeatif X(k)=n then /找到一个位置/ if k=n then print (X) /是一个完整的解则打印这个数组/else kk+1;X(k)0 /否则转到下一行/ end if else kk-1 /回溯/end ifrepeatEnd NQUEENS五、算法实现本实验程序是使用C#编写,算法实现如下:1.queen类实现8皇后问题的计算,将结果存入数组。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Collections;namespace _8Queen public class Queen public static ArrayList arr = new ArrayList(); /存放查询结果 private static bool columflag = new bool8true, true,true,true,true,true,true,true;/列占用标记 true为可用 private static bool leftflag = new bool15true,true,true, true,true,true,true,true,true,true,true,true,true,true,true;/左行对角线占用标记 private static bool rightflag = new bool15true,true, true,true,true,true,true,true,true,true,true,true,true,true,true;/右行对角线占用标记 private static int, position = new int,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/皇后位置坐标 public static int sum = 0; public static void TryStep(int i)/i取值1至8 for (int j = 1; j = 8; j+) if (columflagj - 1 & leftflagi + j - 2 & rightflagi - j + 7)/如果当前位置可以放置 columflagj - 1 = false; leftflagi + j - 2 = false; rightflagi - j + 7 = false;/占用 positioni - 1, j - 1 = 1;/加入皇后位置 if (i 8) TryStep(i + 1);/进入下一行 else int, position1 = new int8,8;/皇后位置坐标 for (int m = 0; m 8; m+) /打印解法 for (int n = 0; n 8; n+) position1m, n = positionm, n; arr.Add(position1); int t = arr.Count; sum+;/解法数统计 columflagj - 1 = true;/如果不能放置时,取消占座及移走皇后 leftflagi + j - 2 = true; rightflagi - j + 7 = true; positioni - 1, j - 1 = 0; 2.图形界面 Form1using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace _8Queen public partial class Form1 : Form public Form1() InitializeComponent(); run(); private PictureBox, card; private int rows;/行数 private int cols;/列数 private int size = 8; public int index = 0; public int sum; private void run()/初始化 动态加载8*8的PictureBox控件,作为棋盘 rows = size; cols = size; this.card = new PictureBoxrows, cols; this.panel1.Controls.Clear(); for (int i = 0; i rows; i+) for (int j = 0; j cols; j+) this.cardi, j = new PictureBox(); this.cardi, j.Location = new System.Drawing.Point(70 * j, 70 * i); this.cardi, j.Name = i.ToString() + j.ToString(); this.cardi, j.Size = new System.Drawing.Size(70, 70); this.panel1.Controls.Add(cardi, j); Queen.TryStep(1); sum = Queen.arr.Count; for (int f = 1; f = sum; f+) boBox1.Items.Add(f); comboBox1.SelectedIndex = 0; label3.Text = sum.ToString(); setPictureBox(); public void setPictureBox()/布局,放置皇后 int, p = (int,)Queen.arrindex; for (int i = 0; i rows; i+) for (int j = 0; j sum) index = 0; MessageBox.Show(结束!共+sum+种方案?); setPictureBox(); comboBox1.Text = (index + 1).ToString(); comboBox1.SelectedIndex = index; private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)/选择某一个方案 index = comboBox1.SelectedIndex; setPictureBox(); 六、运行结果任意截取四种方案 共92种方案 可以任选一种方案显示 七、实验小结:回溯法有“通用解题法”之称。用它可以系统地搜
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026秋季国家管网集团湖南公司高校毕业生招聘4人笔试参考题库(浓缩500题)及参考答案详解(精练)
- 2025国网辽宁省电力公司高校毕业生提前批招聘笔试模拟试题浓缩500题附答案详解(b卷)
- 同仁堂集团2026届高校毕业生招聘考试参考试题(浓缩500题)及答案详解【有一套】
- 2026国网江西省高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题及答案详解参考
- 2026秋季国家管网集团北京管道有限公司高校毕业生招聘考试参考题库(浓缩500题)附答案详解(夺分金卷)
- 2026国网宁夏电力校园招聘(提前批)笔试模拟试题浓缩500题附答案详解(培优a卷)
- 2026秋季国家管网集团液化天然气接收站管理公司高校毕业生招聘考试备考试题(浓缩500题)有答案详解
- 2026秋季国家管网集团西部管道公司高校毕业生招聘笔试参考题库(浓缩500题)带答案详解(b卷)
- 2026秋季国家管网集团工程技术创新公司(国家管网集团造价管理中心)高校毕业生招聘考试参考试题(浓缩500题)附答案详解(培优a卷)
- 2026国网甘肃省高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题附答案详解(满分必刷)
- 塔里木盆地富满油田超深断裂破碎体油藏地质特性及勘探启示
- 凉皮店开业活动方案
- 可爱风格设计核心方法
- 水上安全救援合同范本
- 湖北省重点高中智学联盟2024-2025年高一下学期5月联考英语试卷(含音频)
- 顶账车位协议书
- 广告项目方案投标文件(技术方案)
- 2024-2025学年天津市河西区八年级上学期期中数学试题及答案
- 《乡村振兴战略课件》课件
- 2025年青海西宁供水集团有限责任公司招聘笔试参考题库含答案解析
- SJG 74-2020 安装工程消耗量定额
评论
0/150
提交评论