八数码问题c语言a星算法详细实验报告含代码解析

(13页)

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

14.9 积分

一、实验内容和要求 八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移 和空格下移这四个操作使得棋盘从初始状态到目标状态。 例如:2 28 83 31 12 23 31 16 64 48 84 47 70 05 57 76 65 5(a) 初始状态 (b) 目标状态图 1 八数码问题示意图请任选一种盲目搜索算法(广度优先搜索或深度优先搜索)或任选一种启 发式搜索方法(全局择优搜索,加权状态图搜索,A 算法或 A* 算法)编程求 解八数码问题(初始状态任选)。选择一个初始状态,画出搜索树,填写相应 的OPEN表和CLOSED表,给出解路径,对实验结果进行分析总结,得出结论。二、实验目的 1. 熟悉人工智能系统中的问题求解过程; 2. 熟悉状态空间的盲目搜索和启发式搜索算法的应用; 3. 熟悉对八数码问题的建模、求解及编程语言的应用。三、实验算法A*算法是一种常用的启发式搜索算法。在 A*算法中,一个结点位置的好坏用估价函数来对它进行评估。A*算法的估价 函数可表示为: f'(n) = g'(n) + h'(n) 这里,f'(n)是估价函数,g'(n)是起点到终点的最短路径值(也称为最小耗费 或最小代价) ,h'(n)是 n 到目标的最短路经的启发值。由于这个 f'(n)其实是 无法预先知道的,所以实际上使用的是下面的估价函数:f(n) = g(n) + h(n) 其中 g(n)是从初始结点到节点 n 的实际代价,h(n)是从结点 n 到目标结点的最 佳路径的估计代价。在这里主要是 h(n)体现了搜索的启发信息,因为 g(n)是已 知的。用 f(n)作为 f'(n)的近似,也就是用 g(n)代替 g'(n),h(n)代替 h'(n)。 这样必须满足两个条件:(1)g(n)=g'(n)(大多数情况下都是满足的,可以不用考虑) ,且 f 必须保持单调递增。 (2)h 必须小于等于实际的从当前节点到 达目标节点的最小耗费 h(n) #include #include using namespace std;const int ROW = 3; const int COL = 3; const int MAXDISTANCE = 10000; const int MAXNUM = 10000;int abs(int a) { if (a0) return a; else return -a; }typedef struct _Node{ int digit[ROW][COL]; int dist; // 距离 int dep; // 深度int index; // 索引值 } Node;Node src, dest;vector node_v; // 储存节点 bool isEmptyOfOPEN() { //判断 Open 表是否空 for (int i = 0; i index = node_v[index].index; while (index != 0) {rstep_v.push_back(node_v[index]);index = node_v[index].index; }for (int i = rstep_v.size() - 1; i = 0; i--)cout 0) {Swap(node_up.digit[x][y], node_up.digit[x - 1][y]);if (isExpandable(node_up)) {dist_up = Distance(node_up, dest.digit); node_up.index = index;node_up.dist = dist_up;node_up.dep = node_v[index].dep + 1;node_v.push_back(node_up);} }Node node_down; //下移操作 Assign(node_down, index); int dist_down = MAXDISTANCE; if (x 0) {Swap(node_left.digit[x][y], node_left.digit[x][y - 1]);if (isExpandable(node_left)) {dist_left = Distance(node_left, dest.digit);node_left.index = index;node_left.dist = dist_left;node_left.dep = node_v[index].dep + 1;node_v.push_back(node_left);} }Node node_right; //右移操作 Assign(node_right, index); int dist_right = MAXDISTANCE; if (y number;src.digit[i][j] = number;} src.index = 0; src.dep = 1;cout number;dest.digit[m][n] = number;}node_v.push_back(src);while (1) {if (isEmptyOfOPEN()) {cout rstep_v;cout “初始状态:“ endl;cout src endl;PrintSteps(loc, rstep_v);cout “成功!“ endl;break;}else ProcessNode(loc);} }return 0; }古今名言敏而好学,不耻下问——孔子业精于勤,荒于嬉;行成于思,毁于随——韩愈兴于《诗》,立于礼,成于乐——孔子己所不欲,勿施于人——孔子读书破万卷,下笔如有神——杜甫读书有三到,谓心到,眼到,口到——朱熹立身以立学为先,立学以读书为本——欧阳修读万卷书,行万里路——刘彝黑发不知勤学早,白首方悔读书迟——颜真卿书卷多情似故人,晨昏忧乐每相亲——于谦书犹药也,善读之可以医愚——刘向莫等闲,白了少年头,空悲切——岳飞发奋识遍天下字,立志读尽人间书——苏轼鸟欲高飞先振翅,人求上进先读书——李苦禅立志宜思真品格,读书须尽苦功夫——阮元非淡泊无以明志,非宁静无以致远——诸葛亮熟读唐诗三百首,不会作诗也会吟——孙洙《唐诗三百首序》书到用时方恨少,事非经过不知难——陆游问渠那得清如许,为有源头活水来——朱熹旧书不厌百回读,熟读精思子自知——苏轼书痴者文必工,艺痴者技必良——蒲松龄声明访问者可将本资料提供的内容用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本文档及相关权利人的合法权利。谢谢合作! 关 键 词: 数码 问题 语言 算法 详细 实验 报告 代码 解析

 天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

关于本文

c语言八数码A星算法代码解析,八数码问题c语言a星算法详细实验报告含代码解析...相关推荐

  1. 数码显示实验报告C语言,数码问题C语言A星算法详细实验报告含代码(9页)-原创力文档...

    一.实验内容和要求 八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移.空格右移.空格上移和空格下移这四个操作使得棋盘从初始状态到 ...

  2. 基于Simulink的带通BPSK信号调制解调实验报告(含代码和slx文件)

    重要声明:为防止爬虫和盗版贩卖,文章中的核心代码和数据集可凭[CSDN订阅截图或公z号付费截图]私信免费领取,一律不认其他渠道付费截图! 摘要 数字相位调制又称为相移键控(Phase Shift Ke ...

  3. c语言成绩管理程序设计,成绩管理程序设计报告(含代码C语言

    <成绩管理程序设计报告(含代码C语言>由会员分享,可在线阅读,更多相关<成绩管理程序设计报告(含代码C语言(19页珍藏版)>请在人人文库网上搜索. 1.大连民族学院计算机科学与 ...

  4. 编译原理上机实习c语言小子集编译程序的实现报告,合肥工业大学编译原理实验报告(完整代码版)...

    <合肥工业大学编译原理实验报告(完整代码版)>由会员分享,可在线阅读,更多相关<合肥工业大学编译原理实验报告(完整代码版)(58页珍藏版)>请在人人文库网上搜索. 1.计算机与 ...

  5. 【操作系统实验】Linux环境下用进程实现哲学家进餐问题——C语言完整代码+详细实验报告

    [注意]代码在文末,以下为详细实验报告 [实验目的]   以哲学家进餐问题为例,学习并熟悉Linux下进程通信.同步机制的具体实现方法,主要是了解并掌握信号量机制和避免死锁的使用方法,使得不会出现哲学 ...

  6. 人工智能实验:蚁群算法求解TSP问题(Python代码实现,附有详细实验报告地址)

    项目简介 这是人工智能实验课的一次作业,项目文件中包含两个py文件,其中Main.py是算法的主体,而其他一些实现则放在AidFunctions.py文件中.代码注释比较详细,可以对照实验报告进行阅览 ...

  7. 超声波测距仪编程_北邮小学期pic单片机-超声波测距仪实验报告(附代码).docx

    北邮小学期pic单片机-超声波测距仪实验报告(附代码) 2014年小学期单片机设计实验报告 题目:超声波测距仪 目录 TOC \o "1-3" \h \z \u HYPERLINK ...

  8. 北邮计算机实习网络爬虫设计报告,北邮计算机实习报告(含代码).doc

    北邮计算机实习报告(含代码) 计算机实习报告 学院: 班级: 学号 序号: 姓名: 目录 一.魔方阵4 1.实验要求4 2.设计4 3.流程图4 4.功能实现5 5.应用5 6.界面5 二.动画设计6 ...

  9. java模拟洗衣机程序,java洗衣机仿真程序实验报告及代码.doc

    java洗衣机仿真程序实验报告及代码.doc 11.实验题目:用java编写洗衣机仿真程序2.实验目的:1.熟悉并掌握洗衣机(全自动)的工作原理和运行过程.2.学会软件工程设计中的一系列分析研究,对需 ...

最新文章

  1. 自定义select 三角样式
  2. 栈和队列互相实现,一文弄懂它们的关系
  3. kvm 虚拟机 实用工具笔记(方便查看ip 磁盘复制和修改文件等)
  4. API性能优化之异步
  5. JAVA 框架-Spring-AOP面向切面
  6. IDEA中如何新建一个带有-P目录的项目
  7. 美团点评酒旅数据仓库建设实践
  8. Hibernate学习汇总
  9. cts(6)---Android8.1(O1)CTS失败项
  10. 基于JAVA+SpringMVC+MYSQL的家政服务平台
  11. java死信队列_Spring Boot系列教程之死信队列详解
  12. winform 图片压缩大小为原图的一半_图片压缩指定大小?!这款神奇的工具有必要了解一下...
  13. win7计算机iis,win7系统如何打开iis管理器|win7系统打开iis管理器的方法
  14. 金士顿2G U盘 3S6677 量产工具
  15. 条件覆盖,路径覆盖,语句覆盖
  16. Python字符串总结大全
  17. 拟合系数 / 决定系数 / R方 / R^2的理解
  18. 鼠标和蓝牙耳机的融合(外观专利)
  19. Python--Opencv:errorFindContours supports only CV_8UC1 images when mode = CV_RETR_FLOODFILL otherw
  20. 9.后台管理系统主页面布局以及左侧导航栏设计

热门文章

  1. JS报错:Uncaught(in promise)DOMException:play()
  2. debian之快速截图
  3. 计算机基础的算法思想
  4. linux能上ps吗,在linux上使用ps(转载)
  5. python关系运算符实例_python编程中最常用的比较运算符实例
  6. 机器视觉——计算视野的小工具
  7. 【spring boot】启动类启动 错误: 找不到或无法加载主类 com.codingapi.tm.TxManagerApplication 的解决方案...
  8. Nginx+Tomcat搭建高性能负载均衡集群
  9. picker.js源码
  10. 【操作系统/OS笔记09】线程、线程的实现、上下文切换、进程控制