下载此文档

商人过河问题.doc


文档分类:外语学习 | 页数:约6页 举报非法文档有奖
1/6
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/6 下载此文档
文档列表 文档介绍
商人过河问题一、三名商人各带一名随从的情况 1. 问题(略) 2. 模型假设 1当一边岸满足随从数大于商人数,但商人数为 0时仍为一种安全状态; 2小船至多可容纳 2人,且渡河时由随从(或者商人)来划船。 3. 分析与建模商人过河需要一步一步实现,比如第一步:两个仆人过河,第二步:一个仆人驾船回来,第三步:又是两个仆人过河,第四步:……其中每一步都使当前状态发生变化,而且是从一种安全状态变为另一种安全状态。如果我们把每一种安全状态看成一个点,又如果存在某种过河方式使状态 a 变到状态 b ,则在点 a 和点 b 之间连一条边,这样我们把商人过河问题和图联系起来,有可能用图论方法来解决商人过河问题。建模步骤:⑴首先要确定过河过程中的所有安全状态,我们用二元数组( , ) x y 表示一个安全状态(不管此岸还是彼岸) ,其中 x 表示留在此岸的主人数, y 表示留在此岸的随从数。两岸各有十种安全状态: (0,0),(0,1),(0,2),(0,3),(2,2),(1,1),(3,0 ),(3,1),(3,2),(3,3) ?⑵在两岸的安全状态之间,如存在一种渡河方法能使一种状态变为另一种安全状态,则在这两种状态之间连一条边。这样,得到如下一个二部图(图 1), 其中下方顶点表示此岸状态,上方顶点表示彼岸状态。我们的目的是要找出一条从此岸(3,3) 到彼岸(0,0) 的最短路。⑶观察发现此岸的状态(0,0) , (3,0) 和彼岸的状态(0,3) , (3,3) 都是孤立点, 在求最短路的过程中不涉及这些点,把它们删去。两岸的点用 1,2, ……,16重新标号。(3,3 )(3,2 )(3,1 )(3,0 )(1,1 )(2,2 )(0,3 )(0,2 )(0,3 )(0,0 ) ○②④⑥⑧⑩○○ 12○ 14○ 16 ①③⑤○⑦⑨○ 11○ 13○ 15○(3,3 )(3,2 )(3,1 )(3,0 )(1,1 )(2,2 )(0,3 )(0,2 )(0,3 )(0,0 ) (图1) 4. 模型求解求最短路程的 matlab 程序 如下: function route=sroute(G,opt) % 求图的最短路的 Dijkstra 算法程序,规定起点为 1 ,顶点连续编号%G 是给定图的邻接矩阵或弧表矩阵,程序能够自动识别%当 opt=0 (或缺省)时求无向图的最短路,当 opt=1 时求有向图的最短路%d ——标记最短距离%route 是一个矩阵,第一行标记顶点,第二行标记 1 到该点的最短路,第三行标记最短路上该点的先驱顶点 while 1% 此循环自动识别或由弧表矩阵生成邻接矩阵 if G(1,1)==0 A=G; break else e=G n=max([e(:,1);e(:,2)]); % 顶点数 m=size(e,1); % 边数 M=sum(e(:,3)); % 代表无穷大 A=M*ones(n,n); for k=1:m A(e(k,1),e(k,2))=e(k,3); if opt==0 A(e(k,2),e(k,1))=e(k,3); % 形成无向图的邻接矩阵 end end A=A-M*eye(n) % 形成图的邻接矩阵 end break end pb(1:length(A))=0;pb(1)=1; in

商人过河问题 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数6
  • 收藏数0 收藏
  • 顶次数0
  • 上传人63229029
  • 文件大小104 KB
  • 时间2017-01-07
最近更新