深度和广度优先分油问题(C#实现)

本文介绍了如何利用广度优先搜索算法解决分油问题,通过C#语言实现,详细阐述了算法选择、问题分析、程序设计过程,并对比了深度优先搜索算法,强调广度优先搜索虽然时间开销大但能保证找到最优解。
摘要由CSDN通过智能技术生成

分油问题

-、问题描述

分油问题:两个小孩去打油,一人带了一个一斤的空瓶,另一个带了一个七两和一个三两的空瓶。原计划各打一斤油,可是由于所带的钱不够,只好合打了一斤油,在回家的路上,二人想平分这一斤油,可是又没有其它工具。现只用这三个瓶子(一斤、七两、三两)精确地分出两个半斤油来。

二、算法描述

F   算法选择

通过分析题目并结合深度优先、广度优先和迭代加深搜索的算法的特点以及有缺点,这里选择广度优先算法来求解该分油问题。如果采用深度优先算法搜索,由于其盲目性导致搜索陷入局部陷阱,并不一定能求得解即使得到解也不一定是最优解,因此并不采用此算法。迭代加深搜索则是在固定的深度上进行深度和广度搜索结合的策略来进行搜索,这样避免了单一的深度搜索无法得到解的缺点,但是找到的解并不一定是最优解。广度优先以牺牲空间代价和时间代价来换取保证取得最优解。由于该问题并不复杂,即使使用广度优先算法也不会占有太多的空间和时间,因此为了取得最优解这里选择广度优先算法来求解。

F   算法描述

1. unVisitedBttsArr表示初始节点列表(待扩展,此为一个动态数组)

2. 如果unVisitedBttsArr为空集,则退出并给出失败信号

3. n取为unVisitedBttsArr的第一个节点,并在  unVisitedBttsArr中删除节点n,放入已访问节点列表haveVisitedBttsArr

4. 如果n为目标节点,则退出并给出成功信号

5. 否则,将n的子节点加到N的末尾,并返回2)

F   问题分析

l     选择合适的数据结构表示问题状态

F   用向量(TSR)表示状态——T表示10两瓶中的油量,S表示7两瓶中的油量,R表示3两瓶中的油量。

F   问题的起始状态:(1000)

F   问题的目标状态:(523)或者(532)或者(550)

l     确定智能算子,用以表示变化状态的规则。由于总共油量为10两,而10两的瓶可以装满所有的油,因此可以把10两的瓶当作一个大油桶,这样此题就化为和上一题8/6类似的问题了。因此在描述变化状态的时候只需给出73瓶的状态即可,10瓶的状态即为10SR的油量。可是由于在程序处理上的一致性,在程序的实现上我还是把1086的瓶子统一处理,而不是用两个状态表示。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值