![结构ppt(5)_2_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-1/17/24d77e5b-4522-46ed-8a7f-86a6f7afde46/24d77e5b-4522-46ed-8a7f-86a6f7afde461.gif)
![结构ppt(5)_2_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-1/17/24d77e5b-4522-46ed-8a7f-86a6f7afde46/24d77e5b-4522-46ed-8a7f-86a6f7afde462.gif)
![结构ppt(5)_2_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-1/17/24d77e5b-4522-46ed-8a7f-86a6f7afde46/24d77e5b-4522-46ed-8a7f-86a6f7afde463.gif)
![结构ppt(5)_2_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-1/17/24d77e5b-4522-46ed-8a7f-86a6f7afde46/24d77e5b-4522-46ed-8a7f-86a6f7afde464.gif)
![结构ppt(5)_2_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-1/17/24d77e5b-4522-46ed-8a7f-86a6f7afde46/24d77e5b-4522-46ed-8a7f-86a6f7afde465.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 4.6 队列的应用农夫过河问题 一个农夫带着一只狼、一只羊和一棵白菜,身处河的南岸。河中只有一条小船,小船只能容下农夫和一件物品,只有农夫能撑船。 请问农夫该采取什么方案才能将所有的东西全部请问农夫该采取什么方案才能将所有的东西全部安全运到北岸。安全运到北岸。1算法选择:算法选择: 求解这个问题的最简单的方法是:一步一步进行试探,每一步都搜索当前可能的选择,对当前合适的选择再考虑下一步的各种方案。2开始状态-全部在南岸3带羊到北岸 4空手回南岸5带菜到北岸 6带羊回南岸 7带狼到北岸 8空手回南岸 9带羊到北岸终止状态10状态的表示 要模拟农夫过河问题,首先需要选择一个对问题中每个角色的位置
2、进行描述的方法。 一个很方便的办法是用四位二进制数顺序分别表示农夫、狼、白菜和羊农夫、狼、白菜和羊的位置。 例如用0表示农夫或者某东西在河的南岸,1表示在河的北岸。因此整数5(其二进制表示为0101) 表示农夫和白菜在河的南岸,而狼和羊在北岸。11确定每个角色位置的函数 用整数location表示上述四位二进制描述的状态, 用下面的四个函数从上述状态中得到每个角色所在位置的代码。 函数返回值为真表示所考察的人或物在河函数返回值为真表示所考察的人或物在河的北岸,否则在南岸。的北岸,否则在南岸。12 确定每个角色位置的函数 int farmer(int location) return (0 !=
3、 (location & 0 x08); int wolf(int location) return (0 != (location & 0 x04); int cabbage(int location) return (0 != (location & 0 x02); int goat(int location) return (0 !=(location & 0 x01);1314算法实现中需要使用以下位运算: 假设x和y都是8位的字符,其值分别是:X= 01010111Y= 11011010。各种字位运算,得到的结果如下: x 10101000(求补) x & y 01010010 x
4、y 10001101(按位加/异或) x | y 11011111 x 5 00000110判断状态是否安全的函数 还应该分析问题中所有角色的各种可能位置构成的状态,确定其中哪些是安全的哪些是不安全的。 根据原题的描述我们知道,单独留下白菜根据原题的描述我们知道,单独留下白菜和羊,或单独留下狼和羊在某一岸的状态和羊,或单独留下狼和羊在某一岸的状态是不安全的。是不安全的。 由此可以编一个函数,通过位置分布的代码来判断状态是否安全。15安全状态的判断函数安全状态的判断函数16 问题的描述问题的描述:从初始状态二进制从初始状态二进制0000(全部在河的南岸全部在河的南岸)出发,出发,寻找一种全部由安
5、全状态构成的状态序列,它寻找一种全部由安全状态构成的状态序列,它以二进制以二进制1111(全部到达河的北岸全部到达河的北岸)为最终目标,为最终目标,并且在序列中的每一个状态都可以从前一状态并且在序列中的每一个状态都可以从前一状态通过农夫(可以带一样东西)划船过河的动作通过农夫(可以带一样东西)划船过河的动作到达。到达。17广度优先:广度优先: 在搜索过程中总是首先搜索在搜索过程中总是首先搜索下面一步的所有可能状态,下面一步的所有可能状态,然后再进一步考虑更后面的然后再进一步考虑更后面的各种情况。各种情况。 为避免不必要的瞎费功夫,要求在序列中不应该出现重复的状态.18农夫 狼 白菜 羊的状态变
6、化00001000100100001010000110011100101100010010101000111011111000100110111011110100110100010100110001011101111000100110111011110100 19队列的设计与使用 为了实现广度优先搜索,算法中需要使用了一个队列moveTo,它的每个元素表示一个可以安全到达的中间状态。 程序执行中,把下一步所有可能达到的安全状态都列举出来,放在这个队列中,然后顺序取出来分别进行处理,处理过程中把再下一步的安全状态放在队列里。 由于队列的操作遵循先进先出的原则,在这个处理过程中,只有在前一步的所有
7、情况都处理完后,才能开始后面一步各情况的处理。20记录解的数据结构 由于需要列举的所有状态(二进制0000 1111)一共16种,所以构造一个包含16个元素的数组route来记录问题的解。 route的每个分量初始化值均为-1,每当我们在队列中加入一个新状态时,就把数组中以该状态作下标的元素的值改为达到这个状态的路径上前一状态的(下标)值。 route的第i个元素记录状态i是否已被访问过,若已被访问过,则在这个数组元素中记入前驱状态值。 最后我们可以利用route元素的值建立起正确的状态路径(问题的解)。21算法算法4.27农夫过河问题的求解农夫过河问题的求解22执行结果Thereversep
8、athis:Thelocationis:15Thelocationis:6Thelocationis:14Thelocationis:2Thelocationis:11Thelocationis:1Thelocationis:9Thelocationis:023队列与栈队列与栈 对队列来说,它的插入运算在表的一端进行,而删除运算却在表的另一端进行。根据队列的这一特点,在使用顺序存储结构时,用了环形队列,这样可解决假溢出问题,但要特别注意队列满和队列空的条件及描述。 对于栈来说,它的插入和删除都是在表的同一端进行的,用顺序存储结构时,要注意栈满、栈空的条件。24 栈和队列的运算都限制在它们的端点
9、上进行,所以也称为限制存取点的表。除栈和队列以外,实用的限制存取点的表还有多种.25限制存取点的表限制存取点的表双端队列双端队列 双端队列是一种特殊的线性表,对它所有的插入和删除都限制在表的两端进行。这两个端点分别记作end1和end2。 它好象一个特别的书架,取书和存书限定在两边进行。26双栈双栈 双栈是一种加限制的双端队列,它规定从end1插入的元素只能从end1端删除,而从end2插入的元素只能从end2端删除。 它就好象两个底部相连的栈。27超队列超队列 超队列是一种输出受限的双端队列,即删除限制在一端(例如end1)进行,而插入仍允许在两端进行。 它好象一种特殊的队列,允许有的最新插入的元素最先删除。28超栈超栈 超栈是一种输入受限的双端队列,即插入限制在一端(例如end2)进行,而删除仍允许在两端进行。 它可以看成对栈溢出时的一种特殊的处理,即当栈溢出时,可将栈中保存最久(end1端)的元素删
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 华师大版数学七年级上册《2.13 有理数的混合运算》听评课记录2
- 《两汉的科技和文化》名师听课评课记录(新部编人教版七年级上册历史)
- 陕教版道德与法治九年级下册9.2《做负责公民》听课评课记录
- 现场安全方案协议书(2篇)
- 人教部编版八年级下册道德与法治1.2《治国安邦的总章程》 听课评课记录
- 小学数学-五年级下册-1-1观察物体(听评课记录)
- 部编版八年级历史上册《第17课 中国工农红军长征》表格式听课评课记录
- 中图版历史七年级下册第12课《影响世界的宋元科技成就》听课评课记录
- 鲁教版历史六年级上册第8课《大变革的时代》听课评课记录
- 五年级上册数学听评课记录《5.5 分数基本性质》(4)-北师大版
- 2023湖北成人学位英语考试真题及答案1
- Q∕SY 06342-2018 油气管道伴行道路设计规范
- 物业管理企业用工风险与防范对策
- 拜耳法氧化铝生产工艺流程框图
- 叉车日常维护保养检查记录表
- 心源性休克的护理.ppt课件
- 曼昆《经济学原理》(微观经济学分册)第8版 全部答案
- 营业抄核收业务知识讲座
- 单位事故隐患排查治理制度及台账
- 分公司经营模式
- 上海通用泛亚整车开发流程
评论
0/150
提交评论