数据结构第七章 图.docVIP

  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文档。上传文档
查看更多
第七章 图 一、渡河问题 1.题目要求: 有一农夫带着一匹狼、一只羊和一筐白菜,想从河的左岸乘船到河的右岸。但由于船太小,农夫每次只能带一样东西过去,而且如果没有农夫看管,狼会吃羊,羊会吃白菜。 设计一个方案,使农夫能把每样东西都安全的送到对岸。要求: 1.功能:设计渡河方案。 2.输入:输入表示安全状态转换的图。 3.输出:过河方案。 2.算法分析: 采用邻接矩阵和邻接表都可以完成求图中两顶点间的路径问题,这里采用邻接矩阵存储结构。其中图中的每个顶点结点包括4个域 ,类型描述为: #define MaxSize 20 /*定义图的顶点类型*/ ?typedef struct ?{ ? Int? Farmer,Wolf,Sheep,Vegetable; ? }VexType; ?/*图的邻接矩阵存储结构定义为:*/ ? typedef struct ? { ??? VexType vexs[MaxSize]; ??? int arcs[MaxSize][MaxSize]; ??? int vexnum,arcnum; ?? }AdjMatrix; 算法思想: 从表面问题看,这个问题不是一个图的问题,但可以把它用图来表示,从而转换为一个图的问题。在这个问题的解决过程中,农夫需要多次乘船往返于两岸之间,每次可以带一样东西或自己单独过河,每一次过河都会使农夫、羊、狼、白菜所处位置都会发生变化。如果采用一个 四元组(FARMER.WOLF.SHEEP.VETABLE)表示当前农夫、狼、羊和白菜所处的位置,其中每个元素可以使0或者1,0表示在作案,1表示在右岸。这样,对这个4个元素的不同取值可以构成16种不同的状态,初始状态为(0,0,0,0)最终要达到的目标为(1,1,1,1)。状态之间的转换可以有下面4种情况。 1.?农夫不带任何东西过河,可表示为: ? (Farmer,Wolf.Sheep,Vegetable)—(!Farmer,Wolf,Sheep,Vegateble) 2.?当农夫和狼在相同位置时,表示农夫带狼过河,即当Farmer==Wolf时: (Farmer,Wolf,Sheep,Vegateble)--(!Farmer,!Wolf,Sheep,Vegetable) 3.? 当农夫和羊在同一位置时,表示农夫带羊过河即Farmer==Sheep时: (Farmer,Wolf,Sheep,Vegateble)--(!Farmer,Wolf,!Sheep,Vegetable) 4.? 当农夫和白菜同一位置时,表示农夫带白菜过河,即当Farmer==Vegateble时: (Farmer,Wolf,Sheep,Vegateble)--(!Farmer,Wolf,Sheep,!Vegetable) 其中,运算!代表非运算,即对于任何元素X,有: 当X=0时 !X=1 当X=1时 !X=0 在这16种状态种,有些状态是不安全的,是不允许出现的,如(1,0,0,1)表示农夫和白菜在右岸,而狼和羊在左岸,这样狼就会吃掉羊。如果16种状态种删除这些不安全的状态,将剩余的安全状态根据上面的转换关系连接起来,就会形成一张图。这样原始问题就会转换为在图中寻找一条从顶点(0,0,0,0)到顶点(1,1,1,1)的路径问题。 数据结构: 采用邻接矩阵和邻接表都可以完成求图中两顶点间的路径问题,这里采用邻接矩阵存储结构。其中图中的每个顶点结点包括4个域?,类型描述为: #define?MaxSize?20 /*定义图的顶点类型*/ ?typedef?struct ?{ ??Int??Farmer,Wolf,Sheep,Vegetable; ??}VexType; ?/*图的邻接矩阵存储结构定义为:*/ ??typedef?struct ??{ ????VexType?vexs[MaxSize]; ????int?arcs[MaxSize][MaxSize]; ????int?vexnum,arcnum; ???}AdjMatrix; 模块划分: 在这个问题中,首先需要自动生成图的邻接矩阵,具体方法是先生成各种安全状态节点,存放在顶点数组中;再根据状态之间的转换关系行程顶点之间的所有边,保存在邻接矩阵中。在建立了图的邻接矩阵存储结构后,利用深度优先搜索思想求出从顶点(0,0,0,0)至顶点(1,1,1,1)的一条简单路径。 一共分为7个模块。 Locate()函数:查找顶点的序号 IsSafe()函数:判断顶点所表示的状态是否安全 IsConnected()函数:判断两个状态之间是否可以转换 GreateGraph()函数:建立图的邻接矩阵 P

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档