Java 递归回溯的动态树构建

Java 递归回溯的动态树构建,java,recursion,tree,backtracking,Java,Recursion,Tree,Backtracking,我有一个问题,我需要解决一个递归回溯问题。它看起来很像n-queen问题,但不同之处在于它使用了不同的候选人和a对称板。总共有四个不同的候选人,每个人都相互依赖。我有两个A,两个国王,两个王后和两个杰克。每个王牌必须紧挨着(水平或垂直)一个国王,每个国王必须紧挨着一个王后,每个王后必须紧挨着一个千斤顶,任何棋子旁边都可以有重复的棋子。具有正确解决方案的电路板如下所示: Grid (y, x)(only the positions between *y,x* are available for c

我有一个问题,我需要解决一个递归回溯问题。它看起来很像n-queen问题,但不同之处在于它使用了不同的候选人和a对称板。总共有四个不同的候选人,每个人都相互依赖。我有两个A,两个国王,两个王后和两个杰克。每个王牌必须紧挨着(水平或垂直)一个国王,每个国王必须紧挨着一个王后,每个王后必须紧挨着一个千斤顶,任何棋子旁边都可以有重复的棋子。具有正确解决方案的电路板如下所示:

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 .
现在我的问题是,我想用一棵树来跟踪作为树的父母和孩子的候选人。我还没有实现树,但是我想知道这个示例中所示的方法是否是一种从中创建树的好方法。如果这是一个很好的创建树的方法,我该如何开始,树如何知道它应该在一个子树上指向哪个父树,并且在解决方案不适合时返回


我希望我已经添加了足够的关于这种情况的信息,提前谢谢。

我在这里可能是错的,但您似乎还没有完全掌握递归搜索算法在这种情况下的工作原理。您想要构建的树结构通常不是显式实现的,而是类似于搜索树的递归调用结构。如果您查看这里的伪代码实现,您将看到没有涉及树结构,回溯(在reject返回true时完成)仅通过从当前调用返回即可完成


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

我已经为解决方案工作了一段时间,终于找到了正确的解决方案!你是对的,我没有解释关于树实现的回溯算法。我在没有树的情况下实现了它,它可以工作:)谢谢你让我用另一种方式思考;)