我需要帮助来解决这个问题,我试着使用二维数组,然后找到最少的交换数量。我不确定该如何解决这个问题。是使用BFS还是DFS?
给你两个四位数的数字。第一个数字是初始数字,第二个数字是目标数字。编写一个java程序,使用尽可能少的操作将初始数转换为目标数。可用的操作如下:四位数中的一个加1。9加1的结果是0。从四位数字中的一个数字减去1。0减去1得到9。交换两个相邻的数字
例1:首字母编号:1111
最终编号: 9999
最小操作数:8
例2:首字母编号:1234
最终编号: 2144
最小操作数:2
发布于 2013-03-25 08:23:08
BFS。
当DFS找到第一个解时,它通常不是在尽可能小的移动次数中找到的解。当解决方案很接近时,它还可以探索长而无意义的路径(如果您不记得访问过的节点,它可能会陷入无限循环)。这些问题可以通过迭代加深DFS来解决,如果有内存限制,这可能是可取的,但对于如此小的搜索空间,BFS更简单。
发布于 2014-08-04 12:48:00
您应该使用BFS算法,因为它将为您提供将第一个数字转换为目标数字的最短方法。DFS只探索路径,而不是最短路径。在某些情况下,DFS可能比BFS更快地找到解决方案,但没有算法保证。
https://stackoverflow.com/questions/15605457
复制相似问题