狼羊过河问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第0步 左边 右边是空的
Send two Quilboars. 第一步,左边往右边运送两只狼,下面是结果
船在右边 Return with one Quilboar. 第二步,右边往左边运送一只狼,下面的结果
船在左边
Send two Quilboars. 第三步,左边往右边运送两只狼,下面的结果
船在右边 Return with one Quilboar. 第四步,右边往左边送一只狼,下面的结果
The x
在下图中,红色线段表示船在左侧,蓝色线条表示船在右侧。 船每经过一个顶点,其就会在左侧与右侧之间交换位置。也就是说路径是在红蓝交替的。
错误答案
一人带着3条狼和3头羊过河,船一次只能坐一人加两只动物, 如狼的只数超过了或者等于羊的数量,狼会吃掉羊,只有羊的只数超过了狼或者主人在,狼才不会吃羊, 主人返回时至少需要带一只动物。 1:先带两只狼过对面,然后带一只狼回来;(这时三只羊还在这边) 先带两只狼过对面
船在右边 Part 2 of the puzzle is finished!
然后带一只狼回来
5:最后把两只狼带到对面,就全部都过来了!!!
问题描述 有三个传教士和三个吃人恶魔要渡过一条河,河中有一条船,只能装下两个人。 在任何地方(无论是岸边还是船上),如果吃人恶魔数量多于传教士数量,吃人恶魔就会吃掉传教士。 问:怎么才能让这些都安全过河? 羊狼LR羊狼,需要进行连线处理,一共有10个状态是正常的 00LR33 , 01,isValid = True 30LR03 , 04,isValid = True
01LR32 , 05,isValid = True 11LR22 , 06,isValid = True 31LR02 , 08,isValid = True 02LR31 , 09,isValid = True 22LR11 , 11,isValid = True 32LR01 , 12,isValid = True 03LR30 , 13,isValid = True 33LR00 , 16,isValid = True 初始状态是16,左边33,右边00 终止状态是01,左边00,右边33
用图论解决
核心问题是,如何构造出图,转换成数据结构
狼羊过河问题
(Too long for a remark.) By the way, one can visualize all possible moves by transforming the puzzle into a graph problem:
船在右边 Return with one Quilboar. 第八步 右边往左边送一只狼,下面的结果
船在左边
Send two Quilboars. 第九步,左边往右边送两只狼,下面的结果
船Байду номын сангаас右边 Return with one Quilboar. 第十步,右边往左边送一只狼,下面的结果
船在左边
Send two Quilboars. 第十一步,左边往右边送两只狼,下面的结果 左边空了
然后带一只狼回来
2:带一只狼和羊过对面,然后把那只羊带回来。(这时两只狼在对面) 带一只狼和羊过对面
这里就完蛋了 然后把那只羊带回来
3:带两只羊过对面,然后带一只狼回来。(这时对面有两只羊和一只狼) 带两只羊过对面
然后带一只狼回来
4:带一只羊和一只狼到对面,然后带一只狼回来。(这时对面有三只羊和一只狼) 带一只羊和一只狼到对面
Now, here’s the solution: Send two Quilboars. Return with one Quilboar. Send two Quilboars. Return with one Quilboar. Send two Orcs. Return with one Orc & one Quilboar. Send two Orcs. Return with one Quilboar. Send two Quilboars. Return with one Quilboar. Send two Quilboars. Part 2 of the puzzle is finished!
还是用连边图比较方便
不过按照下面的方法,需要构造转移状态的话,可能需要一个六维向量,然后进行构建
下面见证奇迹的时候到了,这玩意怎么和图论沾上关系呢! 我们只需要将这些可行状态看作节点就可以了,有人说:“不对,图论还有边呢,你这个图的边在哪里?” 不要慌,请看下面。 我们来构造转移状态,我们也用一个四维向量来表示转移状态,转移状态表示在当前这一步中,有那几样东西(人)在渡河。我们用1表示 渡河,用0表示不渡河。同样的,在[y1,y2,y3,y4]中,y1表示人,y2表示狼,y3 表示羊,y4表示蔬菜。因为y1(人)每次都要划船.所以y1=1 恒成立,例如[1,1,0,0]表示人带着狼从河的一边到另一边。 模拟渡河的过程需要用到异或运算:即0+0=0,1+0=1,0+1=1,1+1=0。对于0+0=0,第一个0表示此物的可行状态,第二个0表示此物的转移状 态,这个算式的意思是: 在彼岸(0)的物体在这一次运输中没有上船(0),结果0表示这个东西还在彼岸。 1+0=1表示此岸(1)的东西没上船(0),结果还在此岸(1)。 0+1=1表示彼岸(0)的东西上了船(1),到达了此岸(1) 1+1表示此岸(1)的东西上了船(1)。到达了彼岸(0)。 哈哈哈,现在,图的节点和边都有了。只需要画出这个图了。然后根据这个图找出[1,1,1,1]到[0,0,0,0]的最短路径,就可以了。找出最短路径 可以用一个简单的工具箱:graphshortestpath()。 在这里留下一道课后题:有三只母狮子带着她们的小狮子过河。三只母狮子都会划船,三只小狮子只有一个会划船。船一次只能带两只狮 子,当母狮子与自己的小狮子分开时。别的母狮子会吃掉这个小狮子。请问:这些狮子应该怎么过河?
船在左边【和第一步的区别是,第一步船在右边,这里船在左边】
Send two Orcs. 第五步,左边往右边送两只羊,下面的结果
船在右边 Return with one Orc & one Quilboar. 第六步,右边往左边送一只狼和一只羊,下面的结果
船在左边
Send two Orcs. 第七步 左边往右边送两只羊,下面的结果
相关文档
最新文档