图论解决渡河问题

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

图论解决渡河问题

农夫,狼,羊,草渡河问题,是一道很经典的问题。讲述的是农夫,狼,羊,草渡河,但只有一艘船,而且每次渡河农夫都只能带一个上船。同时,在农夫不在的情况下,狼与羊不能在一起,羊与草不能在一起。求要用怎样方式渡河,才能保证农夫不受到任何损失。

一、将实际问题转换成数学问题

每次渡河,必然是由一个渡河的状态转变成为另一个状态,在每个状态之间都有渡河的可能。由此,可以作出一幅有向图。并且,会有一个起点与终点,由起点到终点之间的连线,就能找出一个合适的渡河方法。

二、数学问题的实现

1、列出所有岸边状态:

由于只要知道任意的一岸的情况,便能推导出当前的渡河状态,所以只列出起始岸边的情况。

图0

因为条件的限制,所以起始岸边只存在这十种情况。其中V0为起始状态,V9为渡河结束。其中,当人的状态为1时,表示的在起始岸,0则为对岸。

2、列出所有渡河状态:

图1

3、生成有向图的邻接矩阵:

从图0和图1,可以生成一个渡河的有向图。

已知从起始岸到对岸必定是2个成员渡河,而起始岸到对岸则可以单独一人,或者两个成员。

生成的有向图的邻接矩阵如下:

V0 V1 V2 V3 V4 V5 V6 V7 V8 V9

V0 0 0 0 0 0 1 0 0 0 0

V1 0 0 0 0 0 0 1 1 0 0

V2 0 0 0 0 0 1 1 0 1 0

V3 0 0 0 0 0 0 0 1 1 0

V4 0 0 0 0 0 0 0 1 0 1

V5 1 0 1 0 0 0 0 0 0 0

V6 0 1 1 0 0 0 0 0 0 0

V7 0 1 0 1 1 0 0 0 0 0

V8 0 0 1 1 0 0 0 0 0 0

V9 0 0 0 0 1 0 0 0 0 0

图3

4、从邻接矩阵中找出渡河路径:

先将通过的点列入路径的集合里,已知起始位置为V0,则通过路径的集合为{V0},下一状态则为V5,集合变为{V0,V5}。再从V5开始寻找下一状态,当遇到路径集合里有的点后,跳过寻找下一个点,如果不存在下一点路径则将此元素去除路径集合,重新在上一状态寻找。

直到找到V9为止。

路径寻找状态如下表

路径集合是否存在下一点路径

V0 1

V0,V5 1

V0,V5,V2 1

V0,V5,V2,V6 1

V0,V5,V2,V6,V1 1

V0,V5,V2,V6,V1,V7 1

V0,V5,V2,V6,V1,V7,V3 1

V0,V5,V2,V6,V1,V7,V3,V8 0

V0,V5,V2,V8,V3,V7,V3 0

V0,V5,V2,V8,V3,V7,V4 1

V0,V5,V2,V8,V3,V7,V4,V9

图 4

由此,渡河路径为:V0 --> V5 --> V2 --> V6 --> V1 --> V7 --> V4 -->V9.

根据渡河路径,则可以求出每次渡河的情况。

1、人,羊渡河

2、人回来

3、人,草渡河

4、人,羊回来

5、人,狼渡河

6、人回来

7、人,羊渡河

总结:利用图论解决渡河问题主要是依靠将渡河状态归为有向图,并通过有向图的邻接矩阵而求出所需的渡河方式。

相关文档
最新文档