狼羊过河问题
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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. 第七步 左边往右边送两只羊,下面的结果
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. 第七步 左边往右边送两只羊,下面的结果