狼羊过河模型
思维训练:“过河”智力题
![思维训练:“过河”智力题](https://img.taocdn.com/s3/m/a3cd7c9dd5d8d15abe23482fb4daa58da0111cbd.png)
思维训练:“过河”智力题
趣味思维
看题目:
一个农民带着一头狼、一只山羊和一篮子白菜去赶集。
他遇到一条河,河边有一条小船。
他一次只能把一样东西带到船上。
狼和羊不能留在一起,同样羊和白菜也不能留在一块,原因很明显。
还好,狼不喜欢吃白菜。
那么,农民怎样才能把这三样东西都带过河呢?
一题多变1
继续提醒:
独立思考先
上面那个题目
我小时候做过
感觉挺有趣的!
把这个题目变化一下:
三只羊,三只狼过河。
有一条船,般上最多放两只动物。
狼的数量多于羊的数量时,羊会被吃掉。
请问怎样才能都过河?
趣味题
许多辅导书籍都为孩子提供了值得尝试的经典数学趣味题。
但就我个人角度而言,最好的教育方式不在于让孩子去做那些所谓“超水平”的数学题,或者去买一些数学相关方面的书籍让他们来阅读。
我们的培养目标是让孩子自主地形成数学思维,并学会去提问题,鼓励孩子将他们的想法付诸实践。
我们应该能够发现,市面上常见的思维题、趣味题、智力游戏类的书籍,并不完全适合孩子、辅助孩子。
我的目标是:选择孩子们适合的趣味思维题目,以此促进和提升孩子的思维能力。
一题多变2
把上面的题目再变化一下:
三只狼、三只羊过河,船上必须有一只羊,船上最多能有两只动物,狼比羊多时,狼会吃羊,该怎样过河?。
农夫过河——狼羊菜问题
![农夫过河——狼羊菜问题](https://img.taocdn.com/s3/m/3f29d0c8ac51f01dc281e53a580216fc700a5331.png)
农夫过河——狼⽺菜问题
话说⼀位农夫带着⼀只狼、⼀只⽺和⼀个卷⼼菜过河,⽆奈船⼩,农夫每次只能运送⼀样东西,考虑到狼吃⽺、⽺吃菜,因此运送的顺序⾄关重要。
在现实世界⾥解决这个问题并不困难,相信很多⼈都已经有了答案,但是如何⽤程序来解决这⼀问题,就需要动动脑筋了。
这⼜是⼀个与移动物品有关的问题,在前⾯汉诺塔的例⼦中,我们已经领略了解决这类问题的⽅法,⼤致分为三个步骤:
1. 将现实问题转化为数学问题,即,建⽴模型;
2. 将数学问题转化为程序问题,即,给出数据结构及算法;
3. 编写程序解决问题。
下⾯我们就沿着这样的思路来寻找问题的答案。
阅读原⽂。
狼羊过河问题
![狼羊过河问题](https://img.taocdn.com/s3/m/7bf7e15f842458fb770bf78a6529647d27283465.png)
The x
在下图中,红色线段表示船在左侧,蓝色线条表示船在右侧。 船每经过一个顶点,其就会在左侧与右侧之间交换位置。也就是说路径是在红蓝交替的。
错误答案
一人带着3条狼和3头羊过河,船一次只能坐一人加两只动物, 如狼的只数超过了或者等于羊的数量,狼会吃掉羊,只有羊的只数超过了狼或者主人在,狼才不会吃羊, 主人返回时至少需要带一只动物。 1:先带两只狼过对面,然后带一只狼回来;(这时三只羊还在这边) 先带两只狼过对面
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
船在右边 Return with one Quilboar. 第八步 右边往左边送一只狼,下面的结果
船在左边
Send two Quilboars. 第九步,左边往右边送两只狼,下面的结果
船在右边 Return with one Quilboar. 第十步,右边往左边送一只狼,下面的结果
船在左边
Send two Quilboars. 第十一步,左边往右边送两只狼,下面的结果 左边空了
还是用连边图比较方便
不过按照下面的方法,需要构造转移状态的话,可能需要一个六维向量,然后进行构建
下面见证奇迹的时候到了,这玩意怎么和图论沾上关系呢! 我们只需要将这些可行状态看作节点就可以了,有人说:“不对,图论还有边呢,你这个图的边在哪里?” 不要慌,请看下面。 我们来构造转移状态,我们也用一个四维向量来表示转移状态,转移状态表示在当前这一步中,有那几样东西(人)在渡河。我们用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()。 在这里留下一道课后题:有三只母狮子带着她们的小狮子过河。三只母狮子都会划船,三只小狮子只有一个会划船。船一次只能带两只狮 子,当母狮子与自己的小狮子分开时。别的母狮子会吃掉这个小狮子。请问:这些狮子应该怎么过河?
人狼羊菜渡河问题(含Matlab程序)
![人狼羊菜渡河问题(含Matlab程序)](https://img.taocdn.com/s3/m/68cb33223968011ca200910e.png)
人、狼、羊、菜安全渡河问题安全渡河问题又称作“人狼羊菜”问题,其具体描述为:一个人带着一条狼、一只羊、一筐白菜过河但由于船太小,人一次只能带一样东西乘船过河。
狼和羊、羊和白菜不能单独留在同岸,否则羊或白菜会被吃掉。
该问题可使用图论中的最短路算法进行求解。
问题分析根据题意,人不在场时,狼要吃羊,羊要吃菜,因此,人不在场时,不能将狼与羊、羊与菜留在河的任一岸。
可用四维向量v=(m,n,p,q)来表示状态,m表示人,n代表狼,p代表羊,q代表白菜,且m,n,p,q ∈{0,1},0代表在对岸,1代表在此岸。
例如,状态(0,1,1,0)表示人和菜在对岸,而狼和羊在此岸,这时人不在场,狼要吃羊,因此,这个状态是不可行的。
通过穷举法将所有可行的状态列举出来,可行的状态有(1,1,1,1),(1,1,1,0),(1,1,0,1),(1,0,1,1),(1,0,1,0),(0,1,0,1),(0,1,0,0),(0,0,1,0),(0,0,0,1),(0,0,0,0)。
可行状态共有十种。
每一次的渡河行为改变现有的状态。
现构造赋权图G=(V,E,W),其中顶点集V={v1,…, v10}中的顶点(按照上面的顺序编号)分别表示上述10个可行状态,当且仅当对应的两个可行状态之间存在一个可行转移时两顶点之间才有边连接,并且对应的权重取为1,当两个顶点之间不存在可行转移时,可以把相应的权重取为∞。
因此问题变为在图G中寻找一条由初始状态(1,1,1,1)出发,经最小次数转移到达最终状态(0,0,0,0)的转移过程,即求从状态(1,1,1,1)到状态(0,0,0,0)的最短路径。
该问题难点在于计算邻接矩阵,由于摆渡一次就改变现有状态,为此再引入一个四维状态转移向量,用它来反映摆渡情况。
用1表示过河,0表示未过河。
例如,(1,1,0,0)表示人带狼过河。
状态转移只有四种情况,用如下向量表示:(1,0,0,0),(1,1,0,0),(1,0,1,0),(1,0,0,1)现在规定状态向量与转移向量之间的运算为0+0=0,1+0=1,0+1=1,1+1=0通过上面的定义,如果某一个可行状态加上转移向量得到的新向量还属于可行状态,则这两个可行状态对应的顶点之间就存在一条边。
过河问题_精品文档
![过河问题_精品文档](https://img.taocdn.com/s3/m/0d4f4f8c9fc3d5bbfd0a79563c1ec5da50e2d6c4.png)
过河问题引言过河问题是一类经典的数学逻辑问题,涉及到河岸上有一群人/动物需要通过一条狭窄且危险的河流,但只有一艘小船。
这个问题涉及到一系列规则和条件,并要求找到一种最优的解决方案,使得所有人/动物都能够安全地通过河流。
这个问题可以被视为一种思维训练,有助于提高逻辑推理和问题解决能力。
问题描述在典型的过河问题中,通常会有一群人/动物(如农夫、狼、羊、菜)需要通过一条河流。
以下是一个典型的问题描述:- 河岸上有一个农夫、一只狼、一只羊和一颗菜。
- 这个小船只能够携带农夫以及一样其他物品。
- 如果农夫不在场,狼会吃掉羊,羊会吃掉菜。
- 目标是将所有的人/动物都安全地从一岸带到另一岸,而不违反上述条件。
解决方案为了解决这个过河问题,需要找到一个安全且合理的船运策略。
以下是一个可能的解决方案:1. 农夫将羊带到另一岸,然后返回原岸。
2. 农夫将菜带到另一岸,然后把羊带回原岸。
3. 农夫将狼带到另一岸,然后返回原岸。
4. 农夫将羊带到另一岸。
在这个解决方案中,农夫每次都会携带一只人/动物过河,并在返回时如果出现潜在的危险,则在另一岸留下该人/动物。
通过这种方式,可以确保没有任何一种组合会出现危险情况。
思考扩展过河问题可以被进一步扩展和改变,以增加难度和挑战性。
以下是一些可能的扩展:1. 添加更多的人物/动物:例如,增加一只狗和一个猫到过河问题中。
这样会增加更多的可能性和限制条件,使得解决方案更加复杂。
2. 调整规则和条件:可以根据需要调整问题的规则和条件,以提供更多的难度和挑战性。
例如,可以添加时间限制或改变特定物品之间的关系。
3. 使用不同的交通工具:除了小船之外,也可以考虑使用其他交通工具,如桥梁、绳索等。
这些不同的工具可能会改变问题的解决方案。
实际应用过河问题虽然是一个数学逻辑问题,但它可以反映现实生活中的许多情况。
例如,在项目管理中,团队需要合作解决一系列问题,每个问题都有特定的限制和条件。
通过训练逻辑思维和解决问题的能力,可以更好地应对实际挑战。
狼羊过河
![狼羊过河](https://img.taocdn.com/s3/m/6559fc1b844769eae009eda7.png)
截图3
表中的处理函数非常简单,就是根据当前状态以及过河动作,得到一个新状态,如果过河动作与当前状态矛盾,
则返回失败,以FARMER_GO_TAKE_WOLF动作对应的处理函数ProcessFarmerGoTakeWolf()为例,看看ProcessFarmerGoTakeWolf()函数
本题算法的核心就是对这个状态树进行深度优先遍历,当某个状态满足结束状态时就输出一组结果。
需要注意的是,并不是每个动作都可以得到一个新状态,比如“农夫带狼过河”这个动作,
对于那些狼已经在河对岸的状态就是无效的,无法得到新状态,因此这个八叉树并不是满树。除此之外,
题目要求的合法性判断也可以砍掉很多无效的状态。最后一点需要注意的是,即使是有效的状态,也会有重复,
Farmer go back, item states is : 0 0 1 0
Farmer take vegetable go over river, item states is : 1 0 1 1
Farmer take sheep go back, item states is : 0 0 0 1
这个检查由IsProcessedState()函数完成,IsProcessedState()函数的实现也很简单,就是遍历states,
与新状态比较是否有相同状态,代码如下:
截图5
运行程序,最终得到的结果是:
Find Result 1:
Unknown action, item states is : 0 0 0 0
终状态,如果是则说明这个搜索路径可以得到一个解,于是调用PrintResult()函数打印结果,随后的return表示终止设个搜索路
协调博弈经典例子
![协调博弈经典例子](https://img.taocdn.com/s3/m/abfd1b44a517866fb84ae45c3b3567ec112ddc50.png)
协调博弈经典例子
协调博弈是研究有限次博弈的多项和双方决策的一种博弈。
它特
别适用于两个或多个参与者都具有相似利益的博弈,即每个人都想得
到最大利益、最大回报。
它是基于一种“否定协商”思想,即每个参
与者都希望达到最佳解,但他们都不能做出任何让步。
在这样的情况下,他们改为寻找一种使双方共赢的协议,而不是让步。
经典例子之
一是《狼与羊》:
在狼与羊的协调博弈中,有三位参与者:一只狼和两只羊,它们
共享同一条河岸。
在一个传统的中等游戏里,如果狼在一边,羊就在
另一边,它们都无法过河。
但如果狼和羊同时过河,那么就可以减少
对方的食物供给。
在这种情况下,狼将是最大赢家,因为它可以捕捉
一只羊,而羊不能捕捉狼。
如果羊们过河,但狼并未过河的话,羊们
至少可以保护自己,但它们也没有任何收获。
因此,参与者必须要做
出一个让大家都满意的决定,而狼和羊都有各自的目的,这就是“协调”的目的。
解决狼与羊的协调博弈的方法有两种:第一种是使用一个正数表
示羊们的奖励,而将负数用作代价以阻止狼过河;第二种是发放羊群
奖励给狼,让它们放弃捕捉羊,而不要过河。
根据上述解决方案,可
以得出一个最优解:狼获得一定的报酬,而羊们则没有损失,即满足
了双方的利益。
因此,经典的协调博弈例子“狼与羊”可以用来说明,做出最优决策的前提是双方能够共同协商来达成一致,而不是以胜者
为准。
狼羊草过河-图论
![狼羊草过河-图论](https://img.taocdn.com/s3/m/7aaa333f78563c1ec5da50e2524de518964bd316.png)
狼羊草过河问题描述•一位农夫带了狼、羊、草,准备过河。
可是小船每次只能容下农夫和一件物品。
渔民不在时,狼会吃羊、羊会吃草。
而且,我们假设,狼或羊在农夫不在时不会自己跑掉或被人牵走且农夫会划船。
要求我们设计一个方案,使人、狼、羊、草都能安全过河。
问题分析及假设过河问题相当于状态的转移。
初状态是人,狼,羊,草均在此岸,目标终状态是人,狼,羊,草均在对岸。
定义以下两种向量表示状态的转移:•状态向量:用四维向量(人,狼,羊,草)表示人,狼,羊,草各自的状态,记“在此岸”时各分量为“1”,否则为“0”。
例如:(1,1,1,1)表示人,狼,羊,草均在此岸,(0,0,0,0)表示人,狼,羊,草均在对岸。
•运载向量:用四维向量(人,狼,羊,草)表示他们各自被运载的情况,记“被运载”时各分量为“1”,否则记为“0”。
例如:(1,1,0,0)表示被运载的是人和狼,又如(1,0,1,0)表示被运载的是人和羊。
模型定义根据题设要求,在满足系统限定条件下,可得以下状态向量和运载向量集合:•用S表示所有允许状态向量的集合,则S={(1,1,1,1),(1,1,1,0),(1,1,0,1),(1,0,1,1),(1,0,1,0),(0,1,0,1),(0,0,0,1),(0,0,1,0),(0,1,0,0),(0,0,0,0)}•用D表示所有允许运载向量的集合,则D={(1,0,0,0),(1,1,0,0),(1,0,1,0),(1,0,0,1)}状态转移方程:原状态⊕运载=现状态运算规则:1+1=0,1+0=1,0+1=1,0+0=0可取状态向量允许运载方式:可取状态向量+ 可取运载向量=模型求解(1,1,0,0)(1,0,1,0)(1,0,0,1)(1,0,0,0)1.(1,1,1,1) += (0,0,1,1)×= (0,1,0,1)√= (0,1,1,0)×= (0,1,1,1)×(1,1,0,0)(1,0,1,0)(1,0,0,1)(1,0,0,0)2.(0,1,0,1) += (1,0,0,1)×= (1,1,1,1) ×= (1,1,0,0)×= (1,1,0,1)√解法一:初始状态(1,1,1,1)经多次运载状态变化成最终状态(0,0,0,0)(1,1,0,0)(1,0,1,0)(1,0,0,1)(1,0,0,0)3.(1,1,0,1) += (0,0,0,1)√= (0,1,1,1) ×= (0,1,0,0)√= (0,1,0,1)√(1,1,0,0)(1,0,1,0)(1,0,0,1)(1,0,0,0)4.1. (0,0,0,1) += (1,1,0,1)√= (1,0,1,1) √= (1,0,0,0)×= (1,0,0,1)×(1,1,0,0)(1,0,1,0)(1,0,0,1)(1,0,0,0)4.2.(0,1,0,0) += (1,0,0,0)×= (1,1,1,0) √= (1,1,0,1)√= (1,1,0,0)×4.3. (0,1,0,1)与上述第二步重复,必定不是最优解,故不用进行下去。
人狼羊菜过河问题的解法及代码
![人狼羊菜过河问题的解法及代码](https://img.taocdn.com/s3/m/2d5e58c377a20029bd64783e0912a21614797fa1.png)
⼈狼⽺菜过河问题的解法及代码⼈狼⽺菜问题是计算机领域中的经典问题。
之所以经典,⼀⽅⾯这是编译原理等课程中的⼀个建模及编码问题,另⼀⽅⾯也经常被作为智⼒题⽤在⾯试中。
本⽂讨论的是怎么建模、编码的问题。
问题描述:⼀个农夫有⼀条船,和狼、⽺、菜,农夫要把这3样东西运到河到另⼀边,农夫每次最多只能通过这个船运⼀样东西,要防⽌狼吃⽺、⽺吃⽩菜(即不能在没有农夫在的情况下同时在同⼀岸边),该怎么过?该问题的解决分为2个阶段,第⼀阶段是对状态建模,第⼆阶段是⽤⼴度遍历来找到问题的解。
其中⼴度遍历阶段和“量⽔问题”的⼴度遍历解法类似。
问题抽象:建⽴⼀个struct型的state,其中包括4个bool型的变量a1 a2 a3 a4分别对应⼈、狼、⽺、菜的状态,值为true代表在起始的河岸边,false代表在对岸,起始时4个分量都为true。
农夫每过⼀次河⽣成⼀个新的state。
根据题⽬可知,农夫过⼀次河a1取反,且a2 a3 a4值与a1相同的分量也可以分别取反分别⽣成⼀个新的state代表被农夫运到河的对岸的各种选择。
只有a1取反⽽a2 a3 a4都没取反⽣成的新状态代表农夫⾃⼰过河没有带东西。
每次⽣成⼀个新状态后,⾸先要检查是否达到了终⽌状态(a1 a2 a3 a4都为false),其次要检查是否是合法状态(要同时考虑⼀个state对应的河两岸是否有狼吃⽺、⽺吃⽩菜的情况出现),如果状态合法、没到终⽌状态且没有在⼴度遍历队列中出现过,则将状态插⼊⼴度遍历队列,否则将该状态丢弃。
在此过程中我们没有考虑正在渡河的情况,因为每次过河船上总是有⼈,不会出现冲突,视其为不稳定状态直接忽略。
代码如下:#include<iostream>using namespace std;#define MAX 500struct state{bool a1,a2,a3,a4;int parentId;//⽤于回溯输出解决步骤state(){a1 = a2 = a3 = a4 = true;//true表⽰在A地(起始岸边)parentId=-1;}};bool equal(state& astate,state& bstate){if(astate.a1==bstate.a1&&astate.a2==bstate.a2&&astate.a3==bstate.a3&&astate.a4==bstate.a4){return true;}return false;}void assign(state& astate,state& bstate){astate.a1=bstate.a1;astate.a2=bstate.a2;astate.a3=bstate.a3;astate.a4=bstate.a4;astate.parentId = bstate.parentId;}state currentState;state sQueue[MAX];int startPos = 0;int endPos = 1;bool isInQueue(state& newState){for(int i=0;i<endPos;i++){if(equal(newState,sQueue[i])){return true;}}return false;}bool isValidState(state& newState){//总共可能有16种状态。
农夫过河问题算法邻接矩阵
![农夫过河问题算法邻接矩阵](https://img.taocdn.com/s3/m/282a309077eeaeaad1f34693daef5ef7bb0d124a.png)
农夫过河问题是一个经典的人工智能搜索问题,其中一个农夫需要将一只狼、一只羊和一颗白菜从一侧河岸运到另一侧。
在此过程中,农夫要保证狼不吃羊,羊不吃白菜。
邻接矩阵是一种表示图形数据的方法,它可以用矩阵的形式来表示节点之间的关系。
对于农夫过河问题,我们可以将其表示为一个有向图,其中每个节点表示一个状态,每个边表示两个状态之间的转换。
设农夫、狼、羊、白菜分别用F、W、S、C表示,每个状态都包含四个元素的二进制数,表示它们是否在左侧河岸。
例如,初始状态可以表示为(1,1,1,1),即FWSC都在左侧河岸。
下面是农夫过河问题的邻接矩阵:(1,1,1 ,1) (0,1,0,1)(0,0,0,1)(0,0,0,0)(1,0,1,0)(1,0,0,0)(1,1,0,1)(1,1,0,0)(1,1,1,1)0 0 0 0 0 0 0 0(0,1,0,1)0 0 1 0 0 0 1 0(0,0,0,1)0 0 0 0 0 0 0 1(0,0,0,0)0 0 0 0 1 0 0 0(1,0,1,0)0 0 1 0 0 1 0 0(1,0,0,0)0 0 0 1 0 0 0 0(1,1,0,1)0 0 0 0 0 0 0 0(1,1,0,0)0 0 0 0 0 0 0 0在该邻接矩阵中,每个元素(i, j)表示从状态i到状态j是否存在一条转移边。
例如,第二行第三列的元素为1,表示从状态(1,1,1,1)到状态(0,0,0,1)存在一条转移边。
注意到邻接矩阵是对称的,即(i, j)和(j, i)的值相同,因为我们可以反过来将船驶回去。
同时,由于初始状态和最终状态都在左侧河岸,因此它们之间的转移边值都为0。
数学建模人狼羊菜问题
![数学建模人狼羊菜问题](https://img.taocdn.com/s3/m/3d499084f111f18582d05aa6.png)
Байду номын сангаас第7次孃河:人,羊,从左岸到达右岸 濺河成功
第4次渡河:人,菜,从右岸回到左岸 此渡河方案不可行
第3次渡河:人,从左岸到达右岸 此渡河方秦不可行
将可取状态及可取运载分别编成矩阵。共分为五个m文件,一个
主文件xduhe.m数,分别为:
1、duhe(L,B,M,s)函数。
用来实现渡河总思路。 思路为:将起始矩阵A分别与可取运载相加(使 用二进制法则),判断相加后的矩阵C是否是【0,0,0,0】,如果是, 则渡河成功。否则,用fuhe(C,M)函数判断C是否是可取状态,如 果是,则打印并将C与初始矩阵合并成新矩阵,继续调用duhe.m函 数。
我们可以用四维向量来表示状态, 其中第一分量表示人, 第二分 量表示狼,第三分量表示羊,第四分量表示菜;当人或物在此岸时相 应分量取1,在对岸时则取0。
根据题意,人不在场时,狼要吃羊,羊要吃菜,因此,人不在场 时,不能将狼与羊,羊与菜留在河的任一岸。例如,状态(0,1,1,0)表示人和菜在对岸,而狼和羊在此岸,这时人不在场的情况下狼 要吃羊,因此,这个状态是不可行的。 我们通过穷举法将所有可行的状态列举出来,可行的状态有 (1,1,1,1),(1,1,1,0),(1,1,0,1),(1,0,1,1),(1,0,1,0) (0,1,0,1),(0,1,0,0),(0,0,1,0),(0,0,0,1),(0,0,0,0) 可行状态共有十种。每一次的渡河行为改变现有的状态。 用1表示过河,0表示未过河。例如, (1,1,0,0)表示 人带狼过河。状态转移只有四种情况,用如下的向量表示。 (1,0,0,0),(1,1,0,0),(1,0,1,0),(1,0,0,1) 五,模型的建立、模型求解、模型的结果和检验
数学建模人狼羊菜问题
![数学建模人狼羊菜问题](https://img.taocdn.com/s3/m/e91bb96f25c52cc58bd6be69.png)
一,论文题目人,狼,羊,菜渡河问题二,摘要将人狼羊菜依次用一个四维向量表示,对每一分量按二进制法则进行运算,将可行状态与转移状态表示出来,将这种运算方法设计为Matlab语言,进行计算机的计算,最终求得所得结果。
三,问题的重述一个摆渡人希望用一条小船把一只狼,一只羊和一篮白菜从一条河的左岸渡到右岸去,而船小只能容纳人,狼,羊,菜中的两个,绝不能在无人看守的情况下,留下狼和羊或羊和白菜在一起,求应怎样渡河才能把狼羊白菜都运过去?四,模型的假设、符号约定和名词解释我们可以用四维向量来表示状态,其中第一分量表示人,第二分量表示狼,第三分量表示羊,第四分量表示菜;当人或物在此岸时相应分量取1,在对岸时则取0。
根据题意,人不在场时,狼要吃羊,羊要吃菜,因此,人不在场时,不能将狼与羊,羊与菜留在河的任一岸。
例如,状态(0,1,1,0)表示人和菜在对岸,而狼和羊在此岸,这时人不在场的情况下狼要吃羊,因此,这个状态是不可行的。
我们通过穷举法将所有可行的状态列举出来,可行的状态有(1,1,1,1),(1,1,1,0),(1,1,0,1),(1,0,1,1),(1,0,1,0)(0,1,0,1),(0,1,0,0),(0,0,1,0),(0,0,0,1),(0,0,0,0)可行状态共有十种。
每一次的渡河行为改变现有的状态。
用1 表示过河,0 表示未过河。
例如,(1,1,0,0)表示人带狼过河。
状态转移只有四种情况,用如下的向量表示。
(1,0,0,0),(1,1,0,0),(1,0,1,0),(1,0,0,1)五,模型的建立、模型求解、模型的结果和检验将可取状态及可取运载分别编成矩阵。
共分为五个m文件,一个主文件xduhe.m数,分别为:1、duhe(L,B,M,s)函数。
用来实现渡河总思路。
思路为:将起始矩阵A分别与可取运载相加(使用二进制法则),判断相加后的矩阵C是否是【0,0,0,0】,如果是,则渡河成功。
否则,用fuhe(C,M) 函数判断C是否是可取状态,如果是,则打印并将C与初始矩阵合并成新矩阵,继续调用duhe.m函数。
5习题 状态转移法-人狼羊菜问题
![5习题 状态转移法-人狼羊菜问题](https://img.taocdn.com/s3/m/ebcb7b0b581b6bd97f19ea21.png)
(1 , 0 ,1 ,1 ) (1,1,0,1) (1 , 0 , 0 , 0 ) (1 , 0 , 0 ,1 )
∨ E × ×
( 4) 2
(1,0,1,0) (1,1,0,0) → (0,1,0,0) + (1,0,0,1) (1,0,0,0)
( 5 ) 2 (1,1,1, 0 ) −
(1, 0 ,1, 0 ) (1,1, 0 , 0 ) → (1, 0 , 0 ,1 ) (1, 0 , 0 , 0 )
( 6 ) ( 0 , 0 ,1, 0 ) +
(1, 0 ,1, 0 ) (1,1, 0 , 0 ) → (1, 0 , 0 ,1 ) (1, 0 , 0 , 0 )
一、可取状态
A(10种)
次序是(人,狼,羊,白菜)(以左边为标准), 分别是(1,1,1,1) (0,0,0,0) (1,1,1,0) (0,0,0,1) (1,1,0,1) (0,0,1,0) (1,0,1,1) (0,1,0,0) (1,0,1,0) (0,1,0,1)
右边五个正好是左边五个的相反状态。
2.2.1人、狼、羊、菜渡河问题
问题提出 一个摆渡人F希望用一条小船把一
只狼W、一只羊G和一篮白菜C从一条河的 左岸渡到右岸去,而船小只能容纳F、W、 G、C中的两个,由于狼会吃羊,羊会吃白 菜,在运送的过程中决不能在无人看守的 情况下,留下狼和羊,羊和白菜在一起, 应该如何渡河才能将狼、羊、白菜都运过 河?
(1 , 0 ,1 , 0 ) (1 ,1 , 0 , 0 ) → (1 , 0 , 0 ,1 ) (1 , 0 , 0 , 0 )
( 7 ) (1 , 0 ,1 , 0 ) −
狼羊过河问题
![狼羊过河问题](https://img.taocdn.com/s3/m/48397ad3240c844769eaee58.png)
狼、羊、菜过河问题1.模型建立用0-1将人、狼、羊、菜河这边的所有状态表示出来(其中状态1代表在河这边,状态0代表在河对岸),共有16种状态。
由题设条件知,状态(0,1,1,0),(0,0,1,1)(0,1,1,1,)是不允许的,从而对应状态(1,0,0,1)(1,1,0,0)(1,0,0,0,)也是不允许的。
最后得到10种状态。
将它们分别标号如下:1(1 1 1 1)2(1 0 1 1)3(0 0 0 1)4(1 1 0 1)5(1 1 1 0)6(1 0 1 0)7(0 1 0 1)8(0 1 0 0)9(0 0 1 0)10(0 0 0 0)然后将各状态能够相互转移的状态用1表示,不能相互转移的状态用无穷大inf表示,得到关于这10种状态的一个10*10的邻接矩阵。
利用Floyd算法,在matlab上运行,即可找出该过河问题的最佳答案。
所得的邻接矩阵如下:[inf inf inf inf inf inf 1 inf inf infinf inf 1 inf inf inf inf inf 1 infinf 1 inf 1 inf inf inf inf inf infinf inf 1 inf inf inf 1 1 inf infinf inf inf inf inf inf inf 1 1 infinf inf inf inf inf inf inf inf 1 11 inf inf 1 inf inf inf inf inf infinf inf inf 1 1 inf inf inf inf infinf 1 inf inf 1 1 inf inf inf infinf inf inf inf inf 1 inf inf inf inf ]利用Floyd算法:function [D,path]=floyd(a)n=size(a,1);D=a;path=zeros(n,n);for i=1:nfor j=1:nif D(i,j)~=infpath(i,j)=j;endendendfor k=1:nfor i=1:nfor j=1:nif D(i,k)+D(k,j)<D(i,j)D(i,j)=D(i,k)+D(k,j);path(i,j)=path(i,k);endendendendfunction [L,R]=router(D,path,1,10)L=zeros(0,0);R=s;while 1if s==tL=fliplr(L);L=[0,L];returnendL=[L,D(s,t)];R=[R,path(s,t)];s=path(s,t);End输入a=[inf inf inf inf inf inf 1 inf inf infinf inf 1 inf inf inf inf inf 1 infinf 1 inf 1 inf inf inf inf inf infinf inf 1 inf inf inf 1 1 inf infinf inf inf inf inf inf inf 1 1 infinf inf inf inf inf inf inf inf 1 11 inf inf 1 inf inf inf inf inf infinf inf inf 1 1 inf inf inf inf infinf 1 inf inf 1 1 inf inf inf infinf inf inf inf inf 1 inf inf inf inf ]得到:D =2 43 24 6 1 35 74 2 1 2 2 2 3 3 1 33 1 2 1 3 3 2 2 2 42 2 1 2 2 4 1 13 54 2 3 2 2 2 3 1 1 36 2 3 4 2 2 5 3 1 11 32 13 5 2 24 63 3 2 1 1 3 2 2 2 45 1 2 3 1 1 4 2 2 27 3 4 5 3 1 6 4 2 2path =7 7 7 7 7 7 7 7 7 73 3 3 3 9 9 3 3 9 94 2 2 4 4 2 4 4 2 27 3 3 3 8 3 7 8 3 38 9 8 8 8 9 8 8 9 99 9 9 9 9 9 9 9 9 101 4 4 4 4 4 1 4 4 44 4 4 45 5 4 4 5 52 2 2 2 5 6 2 5 2 66 6 6 6 6 6 6 6 6 6L =0 1 2 3 4 5 6 7R =1 7 4 32 9 6 10可得到过河的状态转移为:1---7---4---3---2---9---6---10即人将羊送到河对岸,回来再将狼送到河对岸,在对岸将羊拉回来,再将菜送到河对岸,回来时再和羊一起到河对岸,人狼羊菜全部过河,问题得到解决。
羊和狼过河数学题
![羊和狼过河数学题](https://img.taocdn.com/s3/m/ebf228d2cd22bcd126fff705cc17552707225e24.png)
10 道羊和狼过河数学题题目一有一只羊和一只狼,要过河,只有一条船,船一次只能载一个动物,怎样才能让羊和狼都安全过河?解析:先把羊运到对岸,然后回来把狼运到对岸,同时把羊带回来,再把羊放下,单独把狼运到对岸,最后回来把羊运到对岸。
题目二有一只大羊、一只小羊和一只狼,要过河,船一次只能载两个动物,怎样过河才能保证安全?解析:1. 先把大羊和小羊运到对岸;2. 大羊回来;3. 大羊和狼运到对岸;4. 大羊回来;5. 大羊和小羊运到对岸。
题目三有两只羊和一只狼,要过河,船一次只能载一个动物,怎样过河?解析:1. 先把狼运到对岸;2. 回来;3. 运一只羊到对岸;4. 回来;5. 运另一只羊到对岸。
题目四有一只大羊、一只小羊和两只狼,要过河,船一次只能载两个动物,怎样过河才能确保安全?解析:1. 先把两只狼运到对岸;2. 回来;3. 把大羊和小羊运到对岸;4. 大羊和小羊中的一个回来;5. 把两只狼中的一个运回来;6. 把大羊和另一只动物运到对岸;7. 大羊回来;8. 把剩下的狼运到对岸;9. 回来;10. 把大羊运到对岸。
题目五有三只羊和一只狼,要过河,船一次只能载两个动物,怎样安排过河?解析:1. 先把狼和一只羊运到对岸;2. 狼回来;3. 再运两只羊到对岸;4. 一只羊回来;5. 狼和羊运到对岸。
题目六有两只大羊、一只小羊和一只狼,要过河,船一次只能载两个动物,如何安全过河?解析:1. 两只大羊运到对岸;2. 一只大羊回来;3. 大羊和狼运到对岸;4. 大羊回来;5. 大羊和小羊运到对岸。
题目七有三只羊和两只狼,要过河,船一次只能载两个动物,怎样过河?解析:1. 先把两只狼运到对岸;2. 一只狼回来;3. 运两只羊到对岸;4. 一只羊和一只狼回来;5. 运两只羊到对岸;6. 一只狼回来;7. 运两只狼到对岸。
题目八有一只大羊、两只小羊和一只狼,要过河,船一次只能载两个动物,怎样过河安全?解析:1. 先把大羊和狼运到对岸;2. 大羊回来;3. 运两只小羊到对岸;4. 一只小羊回来;5. 大羊和小羊运到对岸。
例一摆渡人欲将一只狼
![例一摆渡人欲将一只狼](https://img.taocdn.com/s3/m/b06857df4128915f804d2b160b4e767f5acf8021.png)
例一摆渡人欲将一只狼
例一摆渡人欲将一只狼,一头羊,一篮菜从河西渡过河到河东.由于船小,一次只能带一物过河,并且狼与羊,羊与菜不能独处.给出渡河方法解:用四维0-1向量表示(人,狼,羊,菜)在河西岸的状态(在河西岸则分量取1,否则取0),共有24 =16 种状态.在河东岸的状态类似记作.
由题设,状态(0,1,1,0),(0,0,1,1),(0,1,1,1)是不允许的,从而对应状态(1,0,0,1), (1,1,0,0), (1,0,0,0)也是不允许的.
以可允许的10个状态向量作为顶点,将可能互相转移的状态用线段连接起来构成一个图.
根据此图便可找到渡河方法
河西=(人,狼,羊,菜) 河东=(人,狼,羊,菜)
将10个顶点分别记为A1, A2, …, A10 ,则渡河问题化为在该图中求一条从A1到A10的路.
从图中易得到两条路:
A1 A6 A3 A7 A2 A8 A5 A10;
A1 A6 A3 A9 A4 A8 A5 A10.。
人狼羊过河问题
![人狼羊过河问题](https://img.taocdn.com/s3/m/565832f9f705cc175527098a.png)
}
}
//处理路径表:从路径表中反推(从最终步-->开始步)
i=15;//最后一步
if(route[i]==-1) { //若没有方法可以走到1111,则任务失败。
cout<<"过河失败!"<<endl;
return 0;
}
for(j=15;route[i]!=-1 && i>=0;j--){ //route[i]!=-1相当于那一步走不通,那就不用选取了
queue[rear]=Status; rear=(rear+1)%16;//入队
while(front!=rear){
Status=queue[front];front=(front+1)%16;//出队
visited[Status]=1; //访问
for(j=0;j<4;j++){
nextStatus=Status^choice[j]; //从curStatus状态到下一状态nextStatus
在河的一岸,人、狼、羊、草、均要过河,船需人划,而且最多载一物,当人不在时,狼会吃羊,羊会吃草;试安排人狼羊草安全渡河。
一、分析问题
人带着狼、羊和草,身处河的一岸。他要把这些东西全部运到彼岸。问题是他面前只有一条小船,船小到只能容下他和一件物品,另外船必须有人划。而且,因为狼能吃羊,而羊爱吃草,所以人不能留下羊和草或者狼和羊单独在河的一边。以下是解决方案:
现在的问题变成:
从初始状态二进制0000(全部在河的南岸)出发,寻找一种全部由安全状态构成的状态序列,它以二进制1111(全部到达河的北岸)为最终目标,并且在序列中的每一个状态都可以从前一状态通过人(可以带一样东西)划船过河的动作到达。
数学建模人狼羊菜问题
![数学建模人狼羊菜问题](https://img.taocdn.com/s3/m/c196a453fad6195f312ba6b5.png)
一,论文题目人,狼,羊,菜渡河问题二,摘要将人狼羊菜依次用一个四维向量表示,对每一分量按二进制法则进行运算,将可行状态与转移状态表示出来,将这种运算方法设计为Matlab语言,进行计算机的计算,最终求得所得结果。
三,问题的重述一个摆渡人希望用一条小船把一只狼,一只羊和一篮白菜从一条河的左岸渡到右岸去,而船小只能容纳人,狼,羊,菜中的两个,绝不能在无人看守的情况下,留下狼和羊或羊和白菜在一起,求应怎样渡河才能把狼羊白菜都运过去?四,模型的假设、符号约定和名词解释我们可以用四维向量来表示状态,其中第一分量表示人,第二分量表示狼,第三分量表示羊,第四分量表示菜;当人或物在此岸时相应分量取1,在对岸时则取0。
根据题意,人不在场时,狼要吃羊,羊要吃菜,因此,人不在场时,不能将狼与羊,羊与菜留在河的任一岸。
例如,状态(0,1,1,0)表示人和菜在对岸,而狼和羊在此岸,这时人不在场的情况下狼要吃羊,因此,这个状态是不可行的。
我们通过穷举法将所有可行的状态列举出来,可行的状态有(1,1,1,1),(1,1,1,0),(1,1,0,1),(1,0,1,1),(1,0,1,0)(0,1,0,1),(0,1,0,0),(0,0,1,0),(0,0,0,1),(0,0,0,0)可行状态共有十种。
每一次的渡河行为改变现有的状态。
用1 表示过河,0 表示未过河。
例如,(1,1,0,0)表示人带狼过河。
状态转移只有四种情况,用如下的向量表示。
(1,0,0,0),(1,1,0,0),(1,0,1,0),(1,0,0,1)五,模型的建立、模型求解、模型的结果和检验将可取状态及可取运载分别编成矩阵。
共分为五个m文件,一个主文件xduhe.m数,分别为:1、duhe(L,B,M,s)函数。
用来实现渡河总思路。
思路为:将起始矩阵A分别与可取运载相加(使用二进制法则),判断相加后的矩阵C是否是【0,0,0,0】,如果是,则渡河成功。
否则,用fuhe(C,M) 函数判断C是否是可取状态,如果是,则打印并将C与初始矩阵合并成新矩阵,继续调用duhe.m函数。
狼和小羊问题设计
![狼和小羊问题设计](https://img.taocdn.com/s3/m/89678b377dd184254b35eefdc8d376eeaeaa17fb.png)
狼和小羊问题设计狼和小羊问题是一道经典的智力题,它考察了人们的逻辑思维和解决问题的能力。
这个问题可以用于培养人们的思维能力和团队合作意识。
在这个问题中,有一只狼、一只羊和一艘小船,它们需要过河,但是小船只能承载一只动物或人。
而且,如果狼和羊在没有人的情况下被放在一起,狼会吃掉羊。
因此,我们需要找到一种方法,让它们都能安全地过河。
我们可以考虑将狼和羊带到对岸,然后再将狼带回来。
这样,就可以保证狼和羊不会在没有人的情况下相遇。
然而,当我们将狼和羊带到对岸后,我们需要有人留在对岸,以防止狼吃掉羊。
但是这样一来,小船上就只剩下一只人,无法将狼带回来。
另一种方法是将羊和人带到对岸,然后将羊放下,再将人带回来。
这样一来,羊和人都已经到了对岸,而且没有人留在对岸,所以狼无法吃掉羊。
但是这样一来,小船上只剩下狼,无法将狼带到对岸。
以上两种方法都无法解决问题。
那么,我们应该如何解决这个问题呢?我们可以借助于一个额外的条件,即小船可以返回起始岸,而不仅仅是前进。
这样一来,我们可以通过多次往返来解决问题。
我们将狼带到对岸,然后将狼放下,但是将小船返回起始岸。
这样一来,狼和小船都在对岸,而且没有人留在对岸,所以狼无法吃掉羊。
接下来,我们将人带到对岸,然后将人放下,再将狼带回起始岸。
这样一来,人和小船都在对岸,而且没有动物留在对岸,所以狼无法吃掉羊。
接着,我们将羊带到对岸,然后将羊放下,但是将小船返回起始岸。
这样一来,羊和小船都在对岸,而且没有人留在对岸,所以狼无法吃掉羊。
最后,我们将狼带到对岸,然后将狼放下,再将人带回起始岸。
这样一来,狼、羊、人和小船都已经到了对岸,且没有动物被吃掉。
通过以上的步骤,我们成功地解决了狼和小羊问题。
这个问题虽然简单,但是考验了我们的逻辑思维和解决问题的能力。
通过合理地安排行动顺序,我们能够找到解决问题的方法。
这个问题也提醒我们在解决问题时要善于利用已有的条件和资源,并合理规划行动步骤。
只有这样,我们才能在面对各种复杂的问题时找到最佳的解决方案。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大学生数学建模
承诺书
我们仔细阅读了数学建模的规则.
我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。
我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。
我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。
如有违反竞赛规则的行为,我们将受到严肃处理。
所属班级(请填写完整的全名):
队员(打印并签名) :1.
2.
3.
4.
5.
小组负责人(打印并签名):
日期: 2012 年 3月 30日
教师评阅:
人、狼、羊、白菜过河模型
一人摆渡希望用一条船将一只狼,一只羊,一篮白菜从河岸一边带到河岸对面,由于船的限制,一次只能带一样东西过河,绝不能在无人看守的情况下将狼和羊放在一起;羊和白菜放在一起,怎样才能将它们安全的带到河对岸去?
一、问题分析:
在正常情况下,一般要求在渡河过程中不能损失任何物品,但在某些情况下,有时候会从时间和经济考虑,可能会舍弃一些对自己不重要的,现在我们只考虑正常情况下的。
人狼羊白菜安全渡河问题可以看做是一个多步决策过程。
每一步要让船从此岸驶向彼岸或从彼岸返回此岸,都不能使得它们有损失,要对狼羊白菜作出决策,在保证安全的前提下,在有限步内全部安全通过,用图可以找出决策变化的规律,确定每一步的决策来达到安全渡河的目标。
二、模型构建:
用二维向量S k=(x,y) 定义为状态. ,k=1,2,3,4,5,6,7
设A,B,C,D分别为人带狼,人带羊,人带白菜,人不带任何。
安全渡河条件下的集合记为可行状态集合S,
记S k={ (x,y)|x =D,y=A,B,C,D }
其中当k为奇数的时候表示船从此岸驶向彼岸,偶数的时候表示船从彼岸驶向此岸,(x,y)表示x带着y.
第 1 页共6 页
1
第 2 页 共 6 页
2
例如: S 1=(D,B )表示人带着羊从此岸驶向彼岸;
S 2= (D,D)
表示人不带物从彼岸驶向此岸。
三、 模型实现:
此题由于比较简单,用图解法做较之容易,可以做一个过河分析图如下:
图一:在
从图一可以确定狼、羊、白菜过河的过程,可以得到以下的两种渡河的具体方法,用图解法画出来用以下图一,图二表示:
第 3 页 共 6 页 3
图二:
图三:
图二解法A :S1=(D,B),S2=(D,D),S3=(D,A),S4=(D,B),
S5=(D,C),S6=(D,D),S7=(D,B)。
4
图三解法B:S1=(D,B),S2=(D,D),S3=(D,C),S4=(D,B),
S5=(D,A),S6=(D,D),S7=(D,B)。
从以上模型得出了两种移动方案,经过决策S1,S2,……,S7.,最终通过这七步使得人、狼、羊、白菜安全通过,这结果为渡河的方案。
四、结论分析:
从以上图形可以看出有两种办法使得人能带着东西安全渡过河,所建立的多步决策模型可以用计算机求解,但对于该问题,用图解法更容易求的方法。
通过图解法可以得到的两种方法,翻译成分别为方法A和方法B:
方法A:是人先带羊,然后回来,带狼过河,然后把羊带回来,放下羊,带白菜过去,然后再回来把羊带过去。
方法B:是人先带羊过河,然后自己回来,带白菜过去,放下白菜,带着羊回来,然后放下羊,把狼带过去,最后再回转来,带羊过去。
五、模型延拓:
对于这个模型来说首先需要假定许多的外在条件不变下,才有了上述的决策,但对于现实生活中的决策者来说,不一定要将所有的物品带到彼岸就是最好的决策方案,有时候考虑到其他的外在因素存在的时候,决策者可以适当的选择舍弃某些对于大局无伤大雅的物品来做到最优化的决策!
第 4 页共6 页
例如:
1、在往返与河岸之间浪费了许多的时间和精力,这对于某些决策
者来说是很不合理的,他们没有那么多的时间和精力用来浪费!
在此时对于决策者来说就可以考虑舍弃对于整个事件无伤大雅
的事物,可以综合考虑整个事件的经济效益!通过建立模型来
确定最大的经济效益!
2、对于这个问题模型的建立首先它是在确定的外部环境下来进行
的,我们可以假定在外部环境不确定的情况下进行模型建立,
在恶劣的环境下会有突发事件
第 5 页共6 页
5。