农夫过河问题的算法与实现汇总.docxVIP

  • 9
  • 0
  • 约8.99千字
  • 约 21页
  • 2023-09-15 发布于辽宁
  • 举报
农夫过河问题的算法与实现院(系)名称专业班级学号学生姓名指导教师 目录TOC\o1-5\h\z引言1 \o CurrentDocument 问题的描述2 \o CurrentDocument 需求分析3 \o CurrentDocument 概要设计4 \o CurrentDocument 3.1数据结构的设计4 \o CurrentDocument 3.2算法的设计5 \o CurrentDocument 3.3抽象数据类型的设计5 \o CurrentDocument 详细设计6 \o CurrentDocument 4.1算法的主要思想6 \o CurrentDocument 4.2主要功能函数设计7 \o CurrentDocument 4.3算法的实现7 \o CurrentDocument 代码实现10 \o CurrentDocument 测试与运行18 \o CurrentDocument 6.1测试工具18 \o CurrentDocument 6.2运行结果18 \o CurrentDocument 总结与体会19 \o CurrentDocument 参考文献20 农夫过河问题的算法与实现 引言 所谓农夫过河问题是指农夫带一只狼、一只羊和一棵白菜在河南岸,需要安全运到北岸。一条小船只能容下他和一件物品,只有农夫能撑船。问农夫怎么能安全过河,当然狼吃羊,羊吃白菜,农夫不能将这两种或三种物品单独放在河的一侧,因为没有农夫的照看,狼就要吃羊,而羊可能要吃白菜?这类问题的实质是系统的状态问题,要寻求的是从初始状态经一系列的安全状态到达系统的终止状态的一条路径. 问题的描述 任何的实际问题,都可以抽象成固定的数学模型,然后再根据模型解决问题。这样就可以不考虑繁琐的实际过程,从而简化问题。 在我们的问题中,过河与没过河是两种不同的状态。农夫、狼、羊和菜,分别处于这两种状态。而,如果把他们看成一个系统,则农夫、狼、羊和菜的不同状态组合成系统的2的4次方种,即16种状态。 但在系统的16种状态中,有些不满足题给条件,应给予剔除。剔除的判断条件:羊跟狼、菜状态相同,且不同于农夫的状态。 当我们挑选好一系列系统的合法状态后,我们的问题就清晰了很多。我们不妨设,没过河状态为0,过河为1。我们的问题就抽象为,系统从初始状态(0000),经过有限的合法状态,到达最终状态(1111)的过程。系统不同的合法状态之间,可能,有的有路,有的则不能到达。具体的判断条件是,农夫可以与一件物品同时边,或自己单独变。根据这一个条件,我们可以抽象出一个图来:系统的每一种状态视为一个节点,满足条件的节点间有一条路。这样问题就抽象为,在无向图中找一条路。 二、需求分析 1、针对实现整个过程需要多步,不同步骤中各个事物所处位置不同的情况,可定义一个结构体来实现对四个对象狼、羊、白菜和农夫的表示。对于起始岸和目的岸,可以用0或者1来表示,以实现在程序设计中的简便性。 2、题目要求给出四种事物的过河步骤,没有对先后顺序进行约束,这就需要给各个事物依次进行编号,然后依次试探,若试探成功,进行下一步试探。这就需要使用循环或者递归算法,避免随机盲目运算且保证每种情况均试探到。 3、题目要求求出农夫带一只羊,一条狼和一颗白菜过河的办法,所以依次成功返回运算结果后,需要继续运算,直至求出结果,即给出农夫的过河方案。 4、输出界面要求具有每一步中农夫所带对象及每步之后各岸的物体,需要定义不同的数组来分别存储上述内容,并使界面所示方案清晰简洁。 概要设计3.1数据结构的设计 利用图论知识求解的过程。假设分别用farmer表示农夫,wolf表示狼,sheep表示羊,veget表示白菜。初始状态是f、w、s、v都在原岸,即初始状态V1为=(f,w,s,v},在原岸全部可能出现的状态为以下16种:fwsv、fwv、fsv、wsv、fw、fs、fv、ws、wv、sv、f、w、s、v、6,这里6表示原岸是空集,即人、狼、羊、白菜都已运到河的对岸去了。 根据题意可以得到,这16种情况中有6种情况是不允许出现的。它们是:wsv(狼、羊、白菜)、fw(农夫、狼)、fv(农夫、白菜)、ws(狼、羊)、sv(羊、白菜)、f(农夫)。如fv表示人和白菜在原岸,而狼和羊在对岸,这显然是不行的。因此,允许出现的情况只有10种。 我们构造一个图,它的顶点就是这10种状态。如果船某次从河的一岸划往另一岸时,使原岸的状态从V变成V’,我们就作一条从V到V’的弓瓜,这样就可以得到如下图所示的有向图人狼羊白菜人狼人狼白菜人羊白菜人羊 人狼羊白菜 人狼 人狼白菜 人羊白菜 人羊 由于船是在两岸间往返的,那么“过河”问题就转换成在上图中找出一条由结点fwsv到结点

文档评论(0)

1亿VIP精品文档

相关文档