动态树构建与递归回溯

时间:2011-02-11 14:29:40

标签: java recursion tree backtracking

我有这个问题,我需要解决递归回溯问题。它看起来很像n-queen问题,但在使用具有a-symmetric板的不同候选者的方式上有所不同。总共有四个不同的候选人,每个人都有依赖关系。我有2个ace,2个国王,2个皇后和2个插孔。每个王牌必须紧挨着(水平或垂直)一个国王,每个国王必须紧挨着一个女王,每个女王必须在一个杰克旁边,其中没有一个可以在它们旁边有重复。具有正确解决方案的电路板如下所示:

Grid (y, x)(only the positions between *y,x* are available for candidates): 
4,1 4,2 *4,3* 4,4
3,1 *3,2* *3,3* *3,4*
*2,1* *2,2* *2,3* 2,4
1,1 1,2 *1,3* 1,4

Possible Solution
. . K . 
Q J Q .
. A K A
. . J .

现在我的问题是我想用树来跟踪候选人作为树的父母和孩子。我还没有实现树,但我想知道这个例子中显示的方法是否是一个从中创建树的好方法。如果这是一个从中创建树的好方法,我该如何开始,树如何知道它应该在一个孩子的哪个父级,并在解决方案不适合时返回?

我希望我已经提前了解了有关这种情况的足够信息。

1 个答案:

答案 0 :(得分:1)

我可能在这里错了,但看起来你并没有完全理解递归搜索算法在这种情况下应该如何工作。您要构建的树结构通常不是显式实现的,而是递归调用的结构,看起来像搜索树。如果你看一下这里的伪代码实现http://en.wikipedia.org/wiki/Backtracking,你会看到没有涉及树结构,并且回溯(当reject返回true时完成)只是通过从当前调用返回来完成。

在您的情况下,您可能希望在单个数据结构上进行搜索,而不是复制它,因此回溯意味着删除刚刚放下的候选部分,然后返回。