狼羊过河模型

合集下载

农夫过河演示文稿

农夫过河演示文稿

图论问题
• 将各个顶点与人狼羊菜这一点的距离标示 在图顶处,于是可以看到有两种最迅速而 且安全的运送方案 • (1)人狼羊菜,狼菜,人狼菜,狼,人狼 羊,羊,人羊,空; • (2)人狼羊菜,狼菜,人狼菜,菜,人羊 菜,羊,人羊,空。 • 每种方案都要渡河七次。
搜索问题
FWDC
F W
DC
F WG C
• 去掉不可能的状态:狼羊菜,羊菜,狼羊 • 与之对应的三种状态也不可能出现,所以剩下10 种可能的情形。
• 将这十种情形看作是点,只有在两种状态可以相 互转变的时候,在他们之间建立一条边线。 • 至此,整个题目就变成了{人狼羊菜}=>。。。=》 {}的过程;也就是从图中找出从“人狼羊菜”到 “空”的最短路径。
WG C F F W
G C F
W G
C F
WG C
F W G
C
F WG C
W F G
C F WG
C F
W G C
F WG
C
F W G
C
F W
G C
F W G C
F WG C
F W G
C
G C F W F WG
C F W
G C F
WG C F W
G C F
W G C
F W
G C
F WG C
F W
G C
G F W C F WG C
Illegal State
Repeated State
Goal State
F WD C
F
W D C
最初状态 人带羊到对岸 人独自返回 人带狼到对岸
W F D
C F
W D
C
F W D

狼和小羊过河数学题

狼和小羊过河数学题

感谢百度文库让我们在这里与你相见,您的下载就是我们最大的动力。

狼和小羊过河数学题
1. 题目描述
有一只狼、一只小羊和一艘小船,船一次只能载一个动物,狼会吃小羊,在小羊不被狼吃掉的前提下,如何让狼和小羊都安全过河呢?
2. 解题思路
我们可以这样想,因为狼会吃小羊,所以不能让狼和小羊单独在一起,除非狼已经在对岸了。

首先让小羊划船到对岸,然后小羊把船划回来。

接着让狼划船到对岸,这时候狼在对岸,小羊在原岸。

然后让在对岸的狼把船划回来,最后小羊再划船到对岸,这样小羊和狼就都安全过河了。

3. 答案
先送小羊过河,小羊返回;送狼过河,狼返回;再送小羊过河。

4. 解析
这个答案的关键在于避免狼和小羊单独相处的情况。

第一步送小羊过河,因为狼在原岸不会吃到对岸的小羊;小羊返回是为了把船带回来以便送狼过河;狼过河后在对岸,但是不能让狼把船带回来,不然小羊就会被吃,所以让狼返回;最后再送小羊过河就都安全了。

第 1 页共 1 页。

小船渡河问题归纳总结

小船渡河问题归纳总结

小船渡河问题归纳总结在生活中,我们常常会遇到各种各样的问题,有些问题看似简单却隐藏着深刻的道理。

其中,小船渡河问题是一种经典的思考题,它涉及到数学逻辑、思维策略以及团队合作等多个方面。

通过对小船渡河问题的分析与总结,不仅可以锻炼我们的思维能力,还能帮助我们理解人际关系和团队合作的重要性。

小船渡河问题是一种经典的思维问题,故事背景一般是有若干人或物需要过河,但是河上只有一艘小船,而且船的载重有限。

最常见的版本是有一只狼、一只绵羊和一根青草需要过河,但狼会吃掉绵羊,绵羊会吃掉青草。

问题是,如何能够让所有的物品都安全地渡过河流?从这个问题中,我们可以看到思维逻辑的重要性。

一般来说,要解决这类问题,我们需要先从整体上思考,并找到解决问题的关键点。

在小船渡河问题中,关键点就是船的载重限制以及物品相互之间的关系。

通过分析这些关键点,我们可以得出一些解题的策略。

首先,我们可以考虑使用逆向思维。

即先让狼和绵羊过河,再让狼回来,最后再让绵羊和青草过河。

这样一来,狼和绵羊的关系和青草和绵羊的关系就不会产生冲突。

通过这种思维方式,我们可以找到一种安全的渡河方案。

其次,小船渡河问题也能帮助我们理解团队合作的重要性。

在现实生活中,我们经常需要与他人合作解决问题,而团队合作能够提高工作效率和解决问题的能力。

在小船渡河问题中,不同的角色代表了团队中的不同成员,互相之间的关系和配合至关重要。

船的载重限制则可以理解为资源的有限性,提醒我们要合理分配和利用资源。

只有通过合作和团队精神,才能成功地让所有的物品都安全地渡过河流。

除了思维逻辑和团队合作,小船渡河问题还可以引申出许多有意思的思考。

例如,我们可以思考如何扩大问题的规模,让更多的物品渡过河流。

我们还可以考虑如何应对不同的情境变化,例如增加船的载重限制或者改变物品之间的关系等等。

通过对这些问题的思考与探讨,我们可以发展出更加复杂和深入的解题策略。

小船渡河问题是一种锻炼思维能力和团队合作意识的好方式。

数据结构实验-农夫过河问题

数据结构实验-农夫过河问题

农夫过河问题一、实验目的掌握广度优先搜索策略,并用队列求解农夫过河问题二、实验内容问题描述:一农夫带着一只狼,一只羊和一颗白菜,身处河的南岸,他要把这些东西全部运到北岸,遗憾的是他只有一只小船,小船只能容下他和一件物品。

这里只能是农夫来撑船,同时因为狼吃羊、羊吃白菜、所以农夫不能留下羊和狼或羊和白菜在河的一边,而自己离开;好在狼属肉食动物,不吃白菜。

农夫怎么才能把所有的东西安全运过河呢?实验要求如下:(1)设计物品位置的表示方法和安全判断算法;(2)设计队列的存储结构并实现队列的基本操作(建立空队列、判空、入队、出队、取对头元素),也可以使用STL中的队列进行代码的编写;(3)采用广度优先策略设计可行的过河算法;(4)输出要求:按照顺序输出一种可行的过河方案;提示:可以使用STL中的队列进行代码编写。

程序运行结果:二进制表示:1111011011100010101100011001,0000三、农夫过河算法流程⏹Step1:初始状态0000入队⏹Step2:当队列不空且没有到达结束状态1111时,循环以下操作:⏹队头状态出队⏹按照农夫一个人走、农夫分别带上三个物品走,循环以下操作:⏹农夫和物品如果在同一岸,则计算新的状态⏹如果新状态是安全的并且是没有处理过的,则更新path[ ],并将新状态入队⏹当状态为1111时,逆向输出path[ ]数组附录一:STL中队列的使用注:队列,可直接用标准模板库(STL)中的队列。

需要#include<queue>STL中的queue,里面的一些成员函数如下(具体可以查找msdn,搜索queue class):front:Returns a reference to the first element at the front of the queue.pop:Removes an element from the front of the queuepush:Adds an element to the back of the queueempty:Tests if the queue is empty三、实验代码FarmerRiver.H#ifndef FARMERRIVER_H#define FARMERRIVER_Hint FarmerOnRight(int status); //农夫,在北岸返回1,否则返回0int WorfOnRight(int status); //狼int CabbageOnRight(int status); //白菜int GoatOnRight(int status); //羊int IsSafe(int status); //判断状态是否安全,安全返回1,否则返回0void FarmerRiver();#endifSeqQueue.h#ifndef SEQQUEUE_H#define SEQQUEUE_Htypedef int DataType;struct Queue{int Max;int f;int r;DataType *elem;};typedef struct Queue *SeqQueue;SeqQueue SetNullQueue_seq(int m);int IsNullQueue_seq(SeqQueue squeue);void EnQueue_seq(SeqQueue squeue, DataType x);void DeQueue_seq(SeqQueue);DataType FrontQueue_seq(SeqQueue);#endifFarmerRiver.c#include <stdio.h>#include <stdlib.h>#include "SeqQueue.h"#include "FarmerRiver.h"int FarmerOnRight(int status) //判断当前状态下农夫是否在北岸{return (0!=(status & 0x08));}int WorfOnRight(int status){return (0!=(status & 0x04));}int CabbageOnRight(int status){return (0!=(status & 0x02));}int GoatOnRight(int status){return (0!=(status & 0x01));}int IsSafe(int status) //判断当前状态是否安全{if ((GoatOnRight(status)==CabbageOnRight(status)) && (GoatOnRight(status)!=FarmerOnRight(status)))return (0); //羊吃白菜if ((GoatOnRight(status)==WorfOnRight(status)) && (GoatOnRight(status)!=FarmerOnRight(status))) return 0; //狼吃羊return 1; //其他状态是安全的}void FarmerRiver(){int i, movers, nowstatus, newstatus;int status[16]; //用于记录已考虑的状态路径SeqQueue moveTo;moveTo = SetNullQueue_seq(20); //创建空列队EnQueue_seq(moveTo, 0x00); //初始状态时所有物品在北岸,初始状态入队for (i=0; i<16; i++) //数组status初始化为-1{status[i] = -1;}status[0] = 0;//队列非空且没有到达结束状态while (!IsNullQueue_seq(moveTo) && (status[15]==-1)){nowstatus = FrontQueue_seq(moveTo); //取队头DeQueue_seq(moveTo);for (movers=1; movers<=8; movers<<=1)//考虑各种物品在同一侧if ((0!=(nowstatus & 0x08)) == (0!=(nowstatus & movers)))//农夫与移动的物品在同一侧{newstatus = nowstatus ^ (0x08 | movers); //计算新状态//如果新状态是安全的且之前没有出现过if (IsSafe(newstatus)&&(status[newstatus] == -1)){status[newstatus] = nowstatus; //记录新状态EnQueue_seq(moveTo, newstatus); //新状态入队}}}//输出经过的状态路径if (status[15]!=-1){printf("The reverse path is: \n");for (nowstatus=15; nowstatus>=0; nowstatus=status[nowstatus]){printf("The nowstatus is: %d\n", nowstatus);if (nowstatus == 0)return;}}elseprintf("No solution.\n");}Sequeue.c#include <stdio.h>#include <stdlib.h>#include "SeqQueue.h"SeqQueue SetNullQueue_seq(int m){SeqQueue squeue;squeue = (SeqQueue)malloc(sizeof(struct Queue));if (squeue==NULL){printf("Alloc failure\n");return NULL;}squeue->elem = (int *)malloc(sizeof(DataType) * m);if (squeue->elem!=NULL){squeue->Max = m;squeue->f = 0;squeue->r = 0;return squeue;}else free(squeue);}int IsNullQueue_seq(SeqQueue squeue){return (squeue->f==squeue->r);}void EnQueue_seq(SeqQueue squeue, DataType x) //入队{if ((squeue->r+1) % squeue->Max==squeue->f) //是否满printf("It is FULL Queue!");else{squeue->elem[squeue->r] = x;squeue->r = (squeue->r+1) % (squeue->Max);}}void DeQueue_seq(SeqQueue squeue) //出队{if (IsNullQueue_seq(squeue))printf("It is empty queue!\n");elsesqueue->f = (squeue->f+1) % (squeue->Max); }DataType FrontQueue_seq(SeqQueue squeue) //求队列元素{if (squeue->f==squeue->r)printf("It is empty queue!\n");elsereturn (squeue->elem[squeue->f]);}main.c#include <stdio.h>#include <stdlib.h>#include "FarmerRiver.h"int main(void){FarmerRiver();return 0;}实验结果:四、实验总结。

摆渡过河和四人过桥

摆渡过河和四人过桥

1.摆渡过河:一只狼、一头山羊和一箩卷心菜在河的同侧。

一个摆渡人要将它们运过河去,但由于船小,他一次只能运三者之一过河。

显然,不管是狼和山羊,还是山羊和卷心菜,都不能在无人监视的情况下留在一起。

问摆渡人应怎样把它们运过河去?分析:由于摆渡人每次只能运载狼、山羊和卷心菜中的一样,那么必然有两样物品要同时留在岸上。

但是狼和山羊,山羊和卷心菜之间分别存在捕食关系,不能同时留在岸上。

所以摆渡人在第一次渡河时应先运羊过河,留狼和卷心菜在岸上;将羊放在对岸后,摆渡人空船返回。

第二次渡河时运狼(或卷心菜),到达河对岸后放下狼(或卷心菜),将山羊运回。

第三次渡河时将卷心菜(或狼)运到对岸,空船返回。

第四次渡河时再将山羊运到对岸,即完成了渡河任务。

2.四人过桥:有一天晚上,有四个人需要通过架在山谷间的危桥,任意时刻最多只能有两个人在桥上,过桥需要一盏闪光灯,这些人只有一盏闪光灯。

如果单独过桥他们分别需要10、5、2、1分钟,如果两人同时过桥则所需时间是较慢者所需的时间。

18分钟后,沿山谷滚滚而下的山洪将把这座桥冲毁。

这四个人能及时过桥吗?不用图论知识,证明你的结论;并说明如何用图论知识获得答案。

分析及证明:由于这座桥最多只能有两个人同时通过,并且过桥需要一盏闪光灯,但是四个人只有一盏闪光灯,那么唯一的办法就是让其中的2个人一起过桥,然后让其中的1个人再返回来送闪光灯。

将四人按照其单独过桥时所花费时间由短到长编号为A、B、C、D。

当两个人一起过桥时所花时间是两个人中最慢的人的单独过桥时间。

无论谁和D一起过桥都要花费10分钟,为了尽量节省时间,D和C肯定需要一起过桥,并且不能由C或D回来送闪光灯。

因此,首先应该让A和B先过桥(2分钟);然后再让A回来送灯,让C和D过桥(1+10分钟);最后让B回来,A和B一起过桥(2+2分钟)。

总共用时是:2+1+10+2+2=17分钟<18分钟,所以说这四个人在18分钟内能及时过桥。

一年级数学巧妙渡河

一年级数学巧妙渡河

一年级数学--巧妙渡河
猎人要把一只狼,一头羊和一篮白菜从河的左岸带到右岸,但他的渡船太小,一次只能带一样。

因为狼要吃羊,羊会吃白菜,所以狼和羊,羊和白菜不能在无人监视的情况下相处。

问猎人怎样才能达到目的?
解:稍加思考就可得到渡河的方法,如下:
第一次:猎人把羊带至右岸;
第二次:猎人单身回左岸,把白菜带至右岸,此时右岸有猎人,羊和白菜;
第三次:猎人再把羊带回左岸,放下羊把狼带至右岸,此时右岸有猎人,狼和白菜;
第四次:猎人单身回左岸,最后把羊带至右岸,便可完成渡河的任务。

(完)。

人狼羊菜安全渡河问题1500字

人狼羊菜安全渡河问题1500字人狼羊菜安全渡河问题是一个著名的逻辑推理问题,常常用来考察人们在面对复杂情况时的思考能力和解决问题的能力。

问题描述如下:有一天,一个人带着一只狼、一只羊和一颗白菜来到了一条河边,他想把它们都安全地带到对岸去。

但是,他只有一条小船,而且这条小船只能承载他和另外一个物品(人、狼、羊、菜)。

问题是,如果他将狼与羊或羊与菜一起留在岸上,那么狼会吃掉羊,羊会吃掉菜。

请问,这个人应该如何才能够将所有物品都安全地带到对岸去?这个问题可以通过逐步分析来解决。

首先,我们可以将问题简化为只有三个物品的情况,即人、狼和羊。

这样,我们可以列出所有可能的情况如下:1. 人和狼一起过河,然后人回来,再把狼带过去。

这种情况下,狼会吃掉羊。

2. 人和羊一起过河,然后人回来,再把狼带过去。

这种情况下,羊会吃掉菜。

3. 人和羊一起过河,然后人回来,再把羊带过去。

这种情况下,狼会吃掉羊。

通过分析可以发现,前两种情况都是不可行的,因为狼或羊会被吃掉。

所以,我们只能选择第三种情况。

具体而言,我们可以按照以下步骤来解决问题:1. 人带着羊过河,然后人回来。

2. 人带着狼过河,然后把狼放在对岸,但是人自己回来。

3. 人带着菜过河,然后人放菜在对岸,再一起回去。

4. 人带着羊过河,完成。

通过这个方法,我们可以确保所有物品都能够安全地过河。

而且,我们也可以通过类似的方法解决更复杂的问题,比如加入更多的物品。

总结起来,人狼羊菜安全渡河问题是一个充满挑战和乐趣的逻辑推理问题。

通过逐步分析和合理安排,我们可以找到解决问题的方法,并将所有物品都安全地带到对岸。

这种问题可以提高人们的思维能力和解决问题的能力,同时也展示了逻辑推理的重要性。

摆渡人过河问题

《数学建模与计算》问题摆渡人过河问题摘要:摆渡人过河问题属于状态转移问题。

所谓状态转移问题,是研究在一定条件下,系统由一个状态向另一个状态转移能否实现,如果可以转移的话,应如何具体实现?将人狼羊菜依次用一个四维向量表示,对每一分量按二进制法则进行运算,这种运算成为可取运算.将这种运算方法设计为Matlab语言,进行计算机的计算。

关键词:状态转移问题,思维向量一、问题的提出一摆渡人欲将一只狼,一头羊和一篮白菜渡过河,由于船小,摆渡人一次至多带一物过河,并且狼与羊,羊与白菜不能离开摆渡人时放在一起,请给摆渡人设计出度和方法模拟图。

二、问题的分析这个问题可以用递推方法解决,但我们可以将其转换成状态转移问题来解决。

可取状态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)。

可取运载B有4个(1,1,0,0)、(1,0,1,0)、(1,0,0,1)、(1,0,0,0)。

规定A和B的每一分量相加时按二进制进行,这样一次渡河就是一个可取状态和一个可取运载相加,在判断和向量是否属于可取状态即可。

三、定义符号说明Y:表示该状态是可取的;N:表示该状态不是可取的;V:表示该状态虽然可取但已重复。

四、模型的分析、建立将人、狼、羊、菜依次用一个四维向量表示,当一物在左岸时,记相应的分量为1,否则记为0,如表示人和羊在左岸,并称为一个状态,由问题中的限制条件,有些状态是允许的,有的是不允许的。

凡系统可以允许存在的状态称为可取状态,比如是一个可取状态,但是一个不可取状态,此外,把每运载一次也用一个四维向量来表示,如表示人和狼在船上,而羊和白菜不在船上,这自然是可取的运载,因为船可载两物,而出则是不可取运载,这样,利用穷举法可得到:(1)可取状态A共有10个上面5个正好是下面5个的相反状态。

趣味数学五年级2


智力趣题“公鸡不能生蛋” 从前有一个国王,暴虐任性。一次,他对一位大臣说: “我吃的鸡蛋都是母鸡生的,现在想尝尝公鸡蛋的滋味,命令你三天内把公 鸡蛋找来,我将重赏你;如果三天内找不到公鸡蛋,我就要在第四天的早晨处死 你。” 大臣知道厄运将至,但又不敢公开违抗,只有悲伤地离开了朝廷。 三天过去了,大臣无法找到公鸡蛋。最后的一个夜晚,他显得异常烦躁。大 臣的小儿子是一个很聪明的少年,看到爸爸如此焦急,知道一定是大祸临头了。 便问道: “爸爸有什么烦闷的事呢?” “你小孩子家,我讲了又有什么用?”大臣有气无力地回答。 “不,爸爸!告诉我吧,或许我能为你分忧。”少年紧握爸爸的双手,使劲 地摇晃着。 大臣深情地望着自己的孩子,终于说出了事情的原委。少年沉思了一会,劝 爸爸不要着急,他有办法逢凶化吉。
0个关于渡河过桥的数学题 A组: 1.老王体重150斤,他去山上打柴,共打了两捆,每捆重70斤。 老王回家要经过一座小桥,小桥只能载重200斤,请你给他想个办 法,让他一次安全地过河去。 2.有人要过桥,桥中有看守,看守每5分钟出来巡视一遍,然后 回屋打盹。但他巡视时,发现有人从桥东往西走,就赶回桥西。 这人过桥至少要7分钟。请你想办法帮他过桥? 3.一只船在河中行驶,来到一座桥下时,船上的货物高出桥面底 部3厘米,无法通过。现在不准移动货物,你可以想出办法,使船 安 全通过桥底吗?
B组: 7.第一次装运34只到对岸卸下33只,留一只带回东岸;第二次又装上33 只,加上船上原有的一只,共34只运到对岸,卸33只,留一只带回东岸;第 三次把最后33只装上船,一同运到西岸(解法不唯一); 8.一步:两个小孩划到对岸,一个孩子上岸。二步:另一个孩子把船划 回来,他上岸。三步:一个士兵把船划到对岸,他上岸。四步:留在对岸的 孩子把船划回来。五步:两个孩子再把船划到对岸,重复这种步骤,直到把 全部士兵渡过河为止; 9.第一次A、B过(按慢艇速度)留A、B回,4分钟。第二次C、D过,A回,7 分钟。第三次A、B过,2分钟。至少需要13分钟(此法不唯一,答案唯一); 10.如下图所示,将两条木板搭接起来,由甲压住放在下面的木板的一端, 使乙通过。然后乙站在甲的位臵上,使甲通过。这是巧妙利用了杠杆原理。

农夫、狼、羊、菜过河简单算法分析

农夫、狼、⽺、菜过河简单算法分析农夫、狼、⽺、菜过河简单算法分析陌上花飘落0⼈评论9720⼈阅读2015-02-28 11:04:421、问题描述⼀个农夫在河边要过河,但是他带着⼀匹狼、⼀只⽺和⼀颗⽩菜。

他需要⽤船将这三样东西运⾄对岸,然⽽,这艘船的空间有限,只容得下他⾃⼰和另⼀样东西(或狼或⽺或⽩菜)。

若他不在场看管的话,狼就会吃⽺,⽺就会去吃⽩菜。

此⼈如何才能过河。

2、问题分析根据题意我们可以得出⼀下结论:(1)三样东西必须都过河,但是⼀次只能载⼀个;(2)如果农夫不在场,那么狼会吃⽺,⽺会吃⽩菜。

3、算法概述对于此题,抽象成编程问题来解决。

将⼈、狼、⽺、菜在此岸都设为1,当成功渡河后则都为0。

⽤类bankState来表⽰河岸的状态,⽤类boatState来表⽰船上的状态。

⽤time来表⽰运载的次数。

如此⼀来,问题转化成判断所有的1是不是都转化为0了,以及其中两个在⼀起时是否合法的问题了。

4、详细设计按照⼈、狼、⽺、菜的顺序描述,为了描述⽅便,假设在河岸A,要过河到达到河岸B。

其中,⼈、狼、⽺、菜只能为0或1,其他值都是⾮法的。

新建类boatState⽤来描述船上的状态,可知船上的状态只有4种可能,即⼈⾃⼰、⼈和狼、⼈和⽺、⼈和菜,⽤实例化对象boat[4]来表⽰这四种状态。

新建类bankState⽤来描述河岸的状态,实例化对象stateA[record]⽤来记录河岸A的状态,stateB[record]⽤来记录河岸B 的状态,其中record为可能需要的最⼤次数。

初始化stateA[0]值为{1,1,1,1},实例化boat[4],其可取值为{1,0,0,0}、{1,1,0,0}、{1,0,1,0}、{1,0,0,1}⽤于判断船上状态是否合法。

开始渡河。

依次判断是否已经全为0,即是否已经成功渡河。

若成功,则打印过河过程中河岸A的所有状态,否则继续判断。

判断状态是否合法,状态是否出现过已经,若都通过,则进⾏渡河操作,开始进⾏递归。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

--
--
大学生数学建模

承 诺 书
我们仔细阅读了数学建模的规则.
我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、
网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。
我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其
他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正
文引用处和参考文献中明确列出。
我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。如有违反
竞赛规则的行为,我们将受到严肃处理。

所属班级(请填写完整的全名):
队员 (打印并签名) :1.
2.
3.
4.
5.
小组负责人 (打印并签名):

日期: 2012 年 3
月 30日

教师评阅:
--

--
人、狼、羊、白菜过河模型
一人摆渡希望用一条船将一只狼,一只羊,一篮白菜从河岸一边
带到河岸对面,由于船的限制,一次只能带一样东西过河,绝不能在
无人看守的情况下将狼和羊放在一起;羊和白菜放在一起,怎样才能
将它们安全的带到河对岸去?
一、 问题分析:
在正常情况下,一般要求在渡河过程中不能损失任何物品,但在某
些情况下,有时候会从时间和经济考虑,可能会舍弃一些对自己不重要
的,现在我们只考虑正常情况下的。
人狼羊白菜安全渡河问题可以看做是一个多步决策过程。每一步
要让船从此岸驶向彼岸或从彼岸返回此岸,都不能使得它们有损失,要
对狼羊白菜作出决策,在保证安全的前提下,在有限步内全部安全通
过,用图可以找出决策变化的规律,确定每一步的决策来达到安全渡
河的目标。
二、 模型构建:
用二维向量Sk=(x,y) 定义为状态. ,k=1,2,3,4,5,6,7
设A,B,C,D分别为人带狼,人带羊,人带白菜,人不带任何。
安全渡河条件下的集合记为可行状态集合S,
记Sk={ (x,y)|x =D,y=A,B,C,D }
其中当k为奇数的时候表示船从此岸驶向彼岸,偶数的时候表
示船从彼岸驶向此岸,(x,y)表示x带着y.
例如: S1=(D,B)表示人带着羊从此岸驶向彼岸;
--
--
S2= (D,D) 表示人不带物从彼岸驶向此岸。
三、 模型实现:
此题由于比较简单,用图解法做较之容易,可以做一个过河分析
图如下:

图一:在

从图一可以确定狼、羊、白菜过河的过程,可以得到以下的两
种渡河的具体方法,用图解法画出来用以下图一,图二表示:
--

--
图二:
图三:

图二解法A:S1=(D,B),S2=(D,D),S3=(D,A),S4=(D,B),
S5=(D,C),S6=(D,D),S7=(D,B)。

c
b
a

0
a
b
c

d

c
b
a

0
a
b
c

d
--

--
图三解法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:是人先带羊过河,然后自己回来,带白菜过去,放下白菜,带
着羊回来,然后放下羊,把狼带过去,最后再回转来,带羊过去。

五、 模型延拓:
对于这个模型来说首先需要假定许多的外在条件不变下,才有
了上述的决策,但对于现实生活中的决策者来说,不一定要将所有的
物品带到彼岸就是最好的决策方案,有时候考虑到其他的外在因素存
在的时候,决策者可以适当的选择舍弃某些对于大局无伤大雅的物品
来做到最优化的决策!
--

--
例如:
1、 在往返与河岸之间浪费了许多的时间和精力,这对于某些决策
者来说是很不合理的,他们没有那么多的时间和精力用来浪费!
在此时对于决策者来说就可以考虑舍弃对于整个事件无伤大雅
的事物,可以综合考虑整个事件的经济效益!通过建立模型来确
定最大的经济效益!
2、 对于这个问题模型的建立首先它是在确定的外部环境下来进行
的,我们可以假定在外部环境不确定的情况下进行模型建立,
在恶劣的环境下会有突发事件

相关文档
最新文档