人狼羊菜渡河问题(含Matlab程序).docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
人、狼、羊、菜安全渡河问题 安全渡河问题又称作 “人狼羊菜 ”问题,其具体描述为:一个人带着一条狼、一只羊、一筐白菜过河但由于船太小,人一次只能带一样东西乘船过河。狼和羊、羊和白菜不能单独留在同岸,否则羊或白菜会被吃掉。该问题可使用图论中的最短路算法进行求解。 分析 根据 意,人不在 ,狼要吃羊,羊要吃菜,因此,人不在 ,不能 将狼与羊、羊与菜留在河的任一岸。可用四 向量 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, ? , 10v}中的 点(按照上面的 序 号)分 表示上述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 通 上面的定 ,如果某一个可行状 加上 移向量得到的新向量 属于可行状 , 两个可行状 的 点之 就存在一条 。用 算机 程 ,可以利用普通向量的异或运算 ,具体的 Matlab 程序如下: clc,clear a=[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];%每一行是一个可行状 b=[1 0 0 0;1 1 0 0;1 0 1 0;1 0 0 1];%每一行是一个转移状态 w=zeros(10);%邻接矩阵初始化 for i=1:9 for j=i+1:10 for k=1:4 if findstr(xor(a(i,:),b(k,:)),a(j,:)) w(i,j) = 1; end end end end , w = w ; %变成下三角矩阵 c = sparse(w); %构造稀疏矩阵 [x,y,z]= graphshortestpath(c,1,10, ’Directed该图’是,0)无向%图, Directed 属性值为 0 h = view(biograph(c,[], ’ ShowArrows ’ , ’ off ’ , ’ ShowWeights ’ , ’ off %画出无向图 Edges = getedgesbynodeid(h);%提取句柄h中的边集 set(Edges, ’ LineColor ’为,[0例0将0];%来打印清除,边画成黑色 set(Edges, ’ LineWidth ’型线,1.宽5);%度设置为 1.5 赋权图G之间的状态转移关系如下图所示: 节点6 节点7 节点9 节点8 节点10 节点1 节点3 节点2 节点4 节点5 图 可行状态之间的转移 最终求得的状态转移顺序之一为: 1 6 3 7 2 8 5 10 对应方案为:经过 7 次渡河就可以把狼、羊、蔬菜运过河,第一次运羊过河,空船返回;第二次运菜过河,带羊返回;第三次运狼过河,空船返回;第四次运羊过河。 另一种方案同理可由图得,请读者自行写出。 参考文献 司守奎 ,孙玺菁 .数学建模算法与应用 [M]. 北京:国防工业出版社, 2015. 郭强 ,孙浩 .运筹学原理与算法 [M]. 西安 : 西北工业大学出版社, 2006. [3] 严蔚敏 ,吴伟民 .数据结构 [M]. 北京:清华大学出版社, 2002.

您可能关注的文档

文档评论(0)

135****9629 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档