BFS或DFS的应用

时间:2013-03-24 23:35:15

标签: java search

我需要帮助来解决这个问题,我尝试使用2D数组然后找到最少数量的交换。不确定如何解决这个问题。是使用BFS还是DFS?

您将获得两位四位数字。第一个数字是初始数字,第二个数字是目标数字。编写一个java程序,使用尽可能少的操作将初始数转换为目标数。可用的操作如下: 添加四位数中的一位。将1添加到9将导致0。 从四位数中的一位减去1。从0减去1得到9。 交换两个相邻的数字

例如1: 最初的号码:1111

最终号码:9999

min min of operations:8

例如2: 初始编号:1234

最终号码:2144

min min of operations:2

2 个答案:

答案 0 :(得分:0)

BFS。

当DFS找到第一个解决方案时,通常不会在尽可能少的移动中找到解决方案。当解决方案接近时,它还可以探索长而无意义的路径(如果您不记得访问过的节点,它可能会陷入无限循环)。这些问题可以通过迭代加深DFS来解决,如果存在内存约束,这可能是理想的,但BFS对于这么小的搜索空间来说更简单。

答案 1 :(得分:0)

您应该使用BFS算法,因为它会为您提供最短的方法来获得正确的答案。 DFS算法仅探索路径,而不是最短路径。另一方面,BFS以最短的方式探索路径。这意味着,如果BFS通过任何“x”迭代得到任何解决方案,则没有其他方法可以通过y迭代获得该解决方案,其中y <1。 X