- 浏览: 564334 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (270)
- Ask chenwq (10)
- JSF (2)
- ExtJS (5)
- Life (19)
- jQuery (5)
- ASP (7)
- JavaScript (5)
- SQL Server (1)
- MySQL (4)
- En (1)
- development tools (14)
- Data mining related (35)
- Hadoop (33)
- Oracle (13)
- To Do (2)
- SSO (2)
- work/study diary (10)
- SOA (6)
- Ubuntu (7)
- J2SE (18)
- NetWorks (1)
- Struts2 (2)
- algorithm (9)
- funny (1)
- BMP (1)
- Paper Reading (2)
- MapReduce (23)
- Weka (3)
- web design (1)
- Data visualisation&R (1)
- Mahout (7)
- Social Recommendation (1)
- statistical methods (1)
- Git&GitHub (1)
- Python (1)
- Linux (1)
最新评论
-
brandNewUser:
楼主你好,问个问题,为什么我写的如下的:JobConf pha ...
Hadoop ChainMap -
Molisa:
Molisa 写道mapred.min.split.size指 ...
Hadoop MapReduce Job性能调优——修改Map和Reduce个数 -
Molisa:
mapred.min.split.size指的是block数, ...
Hadoop MapReduce Job性能调优——修改Map和Reduce个数 -
heyongcs:
请问导入之后,那些错误怎么解决?
Eclipse导入Mahout -
a420144030:
看了你的文章深受启发,想请教你几个问题我的数据都放到hbase ...
Mahout clustering Canopy+K-means 源码分析
广度优先搜索(Breadth-first Search)算法描述:
- 用N表示初始结点列表(N待扩展)
- 如果N为空集,则退出并给出失败信号
- n取为N的第一个结点,并在N中删除结点n,放入已访问结点列表
- 如果n为目标结点,则退出并给出成功信号
- 否则,将n的子结点加到N的末尾,并返回2步
分油问题描述:
两个小孩去打油,一人带了一个一斤的空瓶,另一个带了一个七两、一个三两的空瓶。原计划各打一斤油,可是由于所带的钱不够,只好两人合打了一斤油,在回家的路上,二人想平分这一斤油,可是又没有其它工具。试仅用三个瓶子(一斤、七两、三两)精确地分出两个半斤油来。
分油问题的Java实现:
1、对问题建模:问题中的实体对象是空瓶,建立Bottle对象,包含空瓶容量以及当前油量属性
int volume = 0; int oil = 0;
2、确定分油的可行方式,并确定分油规则
switch (n) { case 1: // 瓶子1向瓶子2倒油 if (!bottle1.isEmpty() && !bottle2.isFull()) { n = bottle2.needForFull() <= bottle1.oil ? bottle2 .needForFull() : bottle1.oil; newState = new StateNode(bottle1.oil - n, bottle2.oil + n, bottle3.oil, this); } break; case 2: // 瓶子1向瓶子3倒油 if (!bottle1.isEmpty() && !bottle3.isFull()) { n = bottle3.needForFull() <= bottle1.oil ? bottle3 .needForFull() : bottle1.oil; newState = new StateNode(bottle1.oil - n, bottle2.oil, bottle3.oil + n, this); } break; case 3: // 瓶子2向瓶子1倒油 if (!bottle2.isEmpty() && !bottle1.isFull()) { n = bottle1.needForFull() <= bottle2.oil ? bottle1 .needForFull() : bottle2.oil; newState = new StateNode(bottle1.oil + n, bottle2.oil - n, bottle3.oil, this); } break; case 4: // 瓶子2向瓶子3倒油 if (!bottle2.isEmpty() && !bottle3.isFull()) { n = bottle3.needForFull() <= bottle2.oil ? bottle3 .needForFull() : bottle2.oil; newState = new StateNode(bottle1.oil, bottle2.oil - n, bottle3.oil + n, this); } break; case 5: // 瓶子3向瓶子1倒油 if (!bottle3.isEmpty() && !bottle1.isFull()) { n = bottle1.needForFull() <= bottle3.oil ? bottle1 .needForFull() : bottle3.oil; newState = new StateNode(bottle1.oil + n, bottle2.oil, bottle3.oil - n, this); } break; case 6: // 瓶子3向瓶子1倒油 if (!bottle3.isEmpty() && !bottle2.isFull()) { n = bottle2.needForFull() <= bottle3.oil ? bottle2 .needForFull() : bottle3.oil; newState = new StateNode(bottle1.oil, bottle2.oil + n, bottle3.oil - n, this); } break; }
3、在上述的规则,即广度优先搜索的搜索空间中,寻找目标状态。为提高搜索效率,可记住已经搜索过的节点,避免重复搜索,进入无限循环。
ArrayList<StateNode> stateList = new ArrayList<StateNode>(); // 存放所有出现过的状态的数组
if (!tag) { // 如没出现过 加入状态队列和数组 stateQueue.addFirst(newState); stateList.add(newState); }
测试结果:
[10 0 0]
[3 7 0]
[3 4 3]
[6 4 0]
[6 1 3]
[9 1 0]
[9 0 1]
[2 7 1]
[2 5 3]
[5 5 0]
完整代码见附件
- chp1.rar (2.2 KB)
- 下载次数: 25
发表评论
-
Java 常用正则表达式以及示例
2012-06-19 16:55 886众所周知,在程序开 ... -
Java实现排列组合
2012-06-15 21:47 17751、全排列 package cn.edu.xmu.dm ... -
Java: Sort a HashMap by its Value
2012-05-29 18:16 831When you use a TreeMap, the ... -
Java 动态代理机制分析及扩展
2012-05-19 23:26 0http://www.ibm.com/developerwor ... -
Java 编程的动态性—— 类、类装入以及反射机制
2012-05-19 23:23 0http://www.ibm.com/developerwor ... -
Java泛型
2012-05-19 23:16 01、Java泛型介绍 ... -
详解Java内存机制(堆与栈)的分配
2012-05-16 10:24 774Java 把内存划分成两种:一种是栈内存,另一种是堆 ... -
[转]Java操作(DOM、SAX、JDOM、DOM4J)xml方式的四种比较与详解
2012-04-09 17:34 959DOM(JAXP Crimson解析器) ... -
贪心算法解背包问题
2012-03-27 21:27 6097背包问题:与0-1背包问题类似,所不同的是在选择物品i装 ... -
Java多线程入门
2012-03-02 00:36 1452搞起一个有意思的.. 了解下多线程可以干嘛 第一个多 ... -
sun.misc.BASE64Encoder找不到jar包的解决办法
2012-02-29 18:42 1024转自:http://archive.cnblogs.com/a ... -
Java Comparator 对象比较器
2012-02-17 17:39 882package cn.edu.xmu.ru.utils; ... -
Java反编译小工具!
2011-11-08 20:49 793你是否下载到一个jar,发现他的输入和输出不和你心愿,你没法调 ... -
myeclipse 解决内存溢出
2011-11-06 16:14 8921、修改eclipse.ini 在Myeclipse安装目录下 ... -
Java判断字符串是否全由数字组成
2011-10-26 19:19 3220public class RegxUtils { /** ... -
使用StringTokenizer统计文本行单词个数
2011-10-24 16:36 1056StringTokenizer strToke = new S ... -
Java时间戳计算代码执行时间
2011-10-24 09:56 2918import java.util.Calendar; p ... -
Java 常见异常Top 10
2011-10-23 21:25 761NO. 10 java.lang.StackOverf ... -
小技巧:代码中添加以下注解以方便代码的审查
2011-10-23 21:04 1088//TODO 作者名称 (待写入) //XXX 作者名称 ( ... -
遍历HashMap的两种方式比较
2011-10-22 09:41 1050HashMap存储的是键值对,所以一般情况下其遍历 ...
相关推荐
《小孩分油问题的广度优先搜索算法及C++实现》 小孩分油问题是一个经典的逻辑谜题,它涉及到如何利用有限的资源精确地分配物品。在这个问题中,两个小孩只有一斤、七两和三两的三个瓶子,以及一斤的油。目标是将一...
总结来说,分油问题是一个典型的组合优化问题,搜索算法如DFS、BFS和A*是解决问题的有效工具。根据问题的具体特性,选择合适的算法并结合优化策略,可以更高效地找到解决方案。理解这些算法的工作原理并熟练运用,对...
在这个问题中,我们将探讨如何使用深度优先搜索(DFS)、广度优先搜索(BFS)以及迭代加深的深度优先搜索(IDDFS)来解决15拼图问题。 **深度优先搜索(DFS):** DFS是一种用于遍历或搜索树或图的算法。在这个问题...
分油问题的算法通常采用广度优先搜索(BFS)策略,因为它保证能找到最短的路径。以下是算法的基本步骤: 1. **初始化**:输入三个油桶的容量(X=10斤,Y=7斤,Z=3斤)和目标油量(T=5斤)。创建一个队列,将初始...
分油问题便是其中之一,它要求学生不仅要掌握数据结构知识,还要具备算法设计和分析的能力,从而找到将一定量的油从一个容器转移到另一个容器中的最优解。 分油问题的背景是一个经典的智力游戏:有三个容量不等的...
在IT领域,尤其是在算法和计算机科学中,"魔方-BFS-输入_魔方bfs_魔方降群法+双向bfs_魔方降群_"这个标题涉及到的是使用广度优先搜索(Breadth First Search, BFS)解决魔方问题的高级技巧。魔方是一种三维旋转拼图...
以动画的方式采用bfs算法实现八数码问题的解决,html文件可直接运行
在八数码问题中,BFS通常能找出最短的步数解,因为它总是先探索更接近目标的状态。BFS使用队列数据结构来存储待访问的节点,确保先访问最近的节点。 其次,**深度优先搜索(DFS)**是一种深入探索树或图的分支,...
在计算机科学领域,解决这类问题通常运用图搜索算法,如深度优先搜索(DFS)、广度优先搜索(BFS)以及启发式搜索算法A*。 深度优先搜索(DFS)是一种用于遍历或搜索树或图的算法。在八数码问题中,DFS会尽可能深地...
在实际应用中,BFS常用于解决多种问题,如查找最短路径(非负权图)、判断两个节点是否联通、求解最小生成树的Kruskal算法等。通过理解和实现BFS,可以提升对图论和算法的理解,同时对解决复杂问题的能力有所助益。 ...
通过双向的BFS算法,使得公交安排这样一个问题在最大程度上减少了时间复杂度。而且对于换乘次数的限制一直是一个瓶颈,会严重增加时间复杂度,但本程序通过matlab巧妙的设计,使得换乘10次以内都可以理想时间内解答...
总的来说,BFS算法在解决八数码难题这样的问题时,能有效地找到解决方案或判断无解,而`bfs.cpp`的代码实现是理解这一过程的关键。通过学习和理解这段代码,我们可以更深入地掌握BFS的工作原理,并将其应用于其他...
在MATLAB环境中,BFS可以被应用于解决各种问题,比如网络路径查找、最短路径计算等。这里的"rar"可能表示这是一个压缩文件,包含了用MATLAB实现的BFS算法。 描述中提到,这个压缩包包含的是一个基于共轭方向法的BFS...
4. **解迷宫问题**:在寻找迷宫出口的问题中,BFS可以避免陷入局部最优,因为它总是先尝试距离起点最近的可能路径。 5. **拓扑排序**:对于有向无环图(DAG),BFS可以进行拓扑排序,将所有节点按照没有前驱的顺序...
【标题】:“bfs.rar_bFS maze”是一个与广度优先搜索(BFS)算法相关的项目,用于解决迷宫类游戏中的路径寻找问题。 【描述】:在这个项目中,我们利用广度优先搜索策略来解决从迷宫的一个点找到另一个点的最短...
为了解决这个分油问题,我们可以采用**广度优先搜索(BFS)**策略,这可以通过一个**队列**来实现。在程序中,我们首先定义了一个结构体`struct ele`,它包含了三个油桶的当前油量、倒油的源桶和目标桶以及状态在...
【标题】"eightPuzzle_BFS_八数码python_八数码问题_源码.zip" 提供的是一个关于八数码问题(又称滑动拼图游戏)的解决方案,采用Python编程语言,并利用宽度优先搜索(Breadth First Search, BFS)算法。八数码问题...
代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 ...
- **BFS的应用**:BFS在寻找最短路径问题中尤为有用,例如在无权图中寻找两节点间的最短路径,或者在网络中寻找最近的服务器。另外,拓扑排序也是BFS的一个典型应用,它可以按照节点的入度顺序对有向无环图(DAG)...