农夫携物过河程序.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文档。上传文档
查看更多
农夫携物过河程序

题目内容:有一农夫要将自己的羊、蔬菜和狼等3件物品运过河。但农夫过河时所用的船每次最多只能装其中的一件物品,而这3件物品之间又存在一定的制约关系:羊不能单独和狼以及不能和蔬菜在一起,因为狼要吃羊,羊也能吃蔬菜。试构造出问题模式以编程实现这一问题的求解。 问题分析和任务定义: 根据对象的状态分为过河(1)和不过河(0),此对象集合就构成了一个状态空间。问题就是在这个状态空间内有哪些信誉好的足球投注网站一条从开始状态到结束状态的安全路径。显然,其初始状态为四对象都不过河,结束状态为四对象全部过河。这里用无向图来处理,并采用邻接矩阵存储。对于农夫,狼,羊,蔬菜组成一个4位向量,即图的顶点(F,W,S,V),状态空间为16,初始状态为(0000),目标为(1111)。解决问题的方法是,找到所有的安全状态,并在其中有哪些信誉好的足球投注网站出一条(0000)到(1111)的路径。对当前对象是否安全的判断,若当农夫与羊不在一起时,狼与羊或羊与蔬菜在一起是不安全的,其他情况是安全的。有哪些信誉好的足球投注网站一条可行路径时,采用深度优先有哪些信誉好的足球投注网站DFS_path,每个时刻探索一条路径,并记录访问过的合法状态,一直向前探视,直到走不通时回溯。显然,应该用数组来保存访问过的状态,以便回溯。显然农夫每次状态都在改变,最多也就能带一件东西过河,故有哪些信誉好的足球投注网站条件是,在顶点(F,W,S,V)的转换中,狼,羊,蔬菜三者的状态不能大于一个,即只有一个发生改变或者都不变。 数据的输入形式和输入值的范围:本程序不需要输入数据,故不存在输入形式和输 入值的范围。 结果的输出形式:在屏幕上显示安全状态的转换,即一条安全路径。 数据结构的选择概要设计 ⑴数据结构的选择:本程序采用无向图处理。 #define MaxNumVertices 10 //最大顶点数 typedef struct //图的顶点类型 { int Farmer,Wolf,Sheep,Veget;//存储农夫,狼,羊,蔬菜的状态 }VexType; typedef struct//图的各项信息 { int VertexNum,CurrentEdges; //图的当前顶点数和边数 VexType VerticesList[MaxNumVertices]; //顶点向量(代表顶点) int Edge[MaxNumVertices][MaxNumVertices];//邻接矩阵 //用于存储图中的边,其矩阵元素个数取决于顶点个数,与边数无关 }AdjGraph; ⑵为了实现上述程序的功能,需要:①生成所有安全的图的顶点;②查找顶点的位置;③判断目前(F,W,S,V)是否安全,安全返回1,否则返回0;④判断顶点i和顶点j之间是否可转换,可转换返回真,否则假;⑤深度优先有哪些信誉好的足球投注网站从u到v的简单路径;⑥输出从u到v的简单路径,即顶点序列中不重复出现的路径。 ⑶本程序包含7个函数: 主函数main() 生成所有安全的图的顶点函数CreateG() 查找顶点位置函数locate() 判断目前状态(F,W,S,V)是否安全的函数is_safe() 判断顶点i和顶点j之间是否可转换的函数is_connected() 深度优先有哪些信誉好的足球投注网站从u到v的简单路径的函数DFS_path 输出从u到v的简单路径,即顶点序列中不重复出现的路径print_path() 各函数关系如下: 图1 各函数关系图 详细设计和编码 实现概要设计中定义的所有数据类型,对每个操作作出伪码算法。 ⑴数据结构 #define MaxNumVertices 10 //最大顶点数 typedef struct //图的顶点类型 { int Farmer,Wolf,Sheep,Veget; }VexType; typedef struct { int VertexNum,CurrentEdges; //图的当前顶点数和边数 VexType VerticesList[MaxNumVertices]; //顶点向量(代表顶点) int Edge[MaxNumVertices][MaxNumVertices];//邻接矩阵 //用于存储图中的边,其矩阵元素个数取决于顶点个数,与边数无关 }AdjGraph; ⑵图的基本操作 1.查找顶点(F,W,S,V)在图中的位置 int locate(AdjGraph *G,int F,int W,int S,int V) { int i; for(i=0;iG-VertexNum;i++) if(G-VerticesList[i].Farmer==F G-VerticesList[i].Wolf==W G-VerticesList[i].Sheep=

文档评论(0)

weizhent2017 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档