- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- DB34_T 3222-2018 臭鳜鱼加工技术规程.docx VIP
- 20G520-1_2钢吊车梁6m_9m(2020年合订本-高清版).pdf VIP
- 2024年电厂化学专业题库(附答案).pdf VIP
- 屠景明著《象棋实用残局》1956年版-.pdf VIP
- UNIT1 NEVER GIVE IN NEVER, NEVER, NEVER文库.ppt VIP
- 下肢静脉血栓防治课件PPT最新完整版本.pptx VIP
- 食品厂项目计划书.docx VIP
- 七年级上册人教版历史知识点总结.docx VIP
- kosher认证申请表(kosherapplicationform).doc VIP
- 行香子》秦观课件.pptx VIP
原创力文档


文档评论(0)