数据结构课程设计--农夫过河

农民过河

【摘要】

农民问题即一个农民带着一只狼、一只羊和一棵白菜,身处河的南岸,他需要把这些东西全部运到河的北岸。而他只有一条小船,且这只小船小到只能容下他和一件物品,另外只有农民能撑船。农民不能留下狼和羊自己离开,也不能留下白菜和羊自己离开,更不能留下狼,羊和白菜而独自离开,因为没有农民的照看,狼就要吃掉羊,而羊又要吃掉白菜。好在狼是是肉动物,它不吃白菜,问农民应该采取什么方案才能将所有的东西安全地从河的南岸运到北岸?这类农民问题是一个传统的数据结构问题, 利用基于队列的图的广度优先搜索求解农民过河问题是一个易于理解、切实可行的方案, 具有一定的推广价值。

   关键字:农民过河问题; 队列; 广度优先搜索

Farmer Pass Through The River

Abstract 

   

 "Farmer pass through the river "is a problem that one farmer should take a wolf, a cabbage and a goat to pass through the river from the south to the north safely. But there is only one small ship, which is too small to take all of them. What’s worse it is only the farmer who can drive the ship. Obviously, the wolf will eat the goat and the goat will eat the cabbage, so the farmer can’t leave with the wolf and the goat together, or with the goat and the cabbage together, even with the wolf, the goat and the cabbage all together. Luckily, the wolf is the animal that only eats the meat, so it will not eat the cabbage. How will the farmer take them to pass through the river safely? How to pass through the river safely with his belongings is at traditional data structure problem, to solve the farmer’s problem by the breadth - first searching graph, which can be done by the help with queue, is a easy to understand and feasible method, and it can be used widely.

Key words : farmer’s problem to pass through river ; Queue ; breadth - first search

 

一、 实验内容概述(设计任务与技术要求)

   农民过河问题是指农民需要带一只狼、一只羊和一棵白菜到河的南岸去,需要安全运到北岸。而一条小船只能容下他和一件物品,只有农民能撑船。问农民怎么能安全过河,问题中需要涉及到狼会吃羊,羊会吃白菜,所以农民不能将这两种或三种物品单独放在河的一侧,因为没有农民的照看,狼就要吃掉羊,而羊可能又要吃掉白菜。 这类问题的实质是系统的状态问题,要寻求的是从初始状态经一系列的安全状态到达系统的终止状态的一条路径。

根据实际情况,对此问题分析可以得到不同的特征:一是农民和羊在河的南岸,狼和白菜在河的北岸;二是从一个状态可转到另外一个状态,而不违反狼吃羊,羊吃草的规则(例如农民自己过河或者农民带着羊过河);三是有些状态是不安全的(例如农民一人在北岸,而其他的东西都在南岸);四是初始状态是农民,羊,狼,白菜都在河的南岸和结束状态是农民,羊,狼,白菜都在河的北岸。

实现农民过河问题,则需要找到一条合法的路径(相邻状态之间的转移合法),从开始状态到某个结束状态,路途中不能经过不安全的状态。

二、 实验目的概述(总体设计方案) 

a ) 利用图的有关知识来解决农民过河问题

b ) 根据图的广度(深度)优先搜索来实现实验要求

在实施此问题中,首先要为农民,狼,白菜和羊设置求状态的函数,若某一种物品在河的南岸,则返回0,若在河的的北岸,则返回1;其次是为每一种状态做测试,状态安全则返1,否则返回0

三、 解题思路的描述(数据结构和算法的设计):

 农民过河问题根据图求解的搜索过程可采用两种不同的策略:一种是图的深度优先遍历搜索,另外一种是广度优先遍历搜索。如果采用深度优先遍历搜索,则需要采用递归的方式来编写程序,而这种程序的系统的开销比较大,如果采用广度优先搜索,则可以借助队列的方式,这种方式开销较小。则我在此实验中,采取的是利用广度优先搜索来解决农民问题。

算法中要先各为农民,狼,白菜和羊设置参数,这可以用枚举类型为各种物品设置参数,其中羊goat=0001,白菜cabbage=0010,狼wolf=0100,农民

  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值