这个遍历问题有解决方案吗?

时间:2011-04-26 14:32:23

标签: graph-algorithm

假设我们有一个矩阵M x N,给定两个随机指定的exitentrance

找到从entranceexit的路径(向上,向下,向左,向右),只覆盖矩阵中的每个节点一次?

2 个答案:

答案 0 :(得分:3)

这显然不总是可以解决的。假设你有这个矩阵,其中A是入口,B是退出:

+---+---+
| A |   |
+---+---+
|   | B |
+---+---+

你是如何解决这个问题的?

答案 1 :(得分:0)

你可以尝试的一件事是这样的:

将您的矩阵拆分为两个,以便entranceexit位于不同的分区中。然后,对于在分割上形成“桥”的每个有效单元对,递归地查找是否存在从entrance到其分区中的单元的有效路径,以及从该单元的对到{{1}的有效路径}。如果没有一对工作,那么我们找不到路径(因为如果存在这样的路径,它必须越过该分区最终)。

使用一个小例子,假设我们有

exit

并将其拆分在中间以给出

+---+---+
| A | B |
+---+---+
|   |   |
+---+---+

与< - >是唯一有效的“桥梁”。命名那对“C”和“D”中的单元格,然后我们有

+---+     +---+
| A |     | B |
+---+     +---+
|   | <-> |   |
+---+     +---+

我们现在找到从A到C以及从D到B的路径。将这些迷你路径拼接在一起,我们得到A到C到D到B.

在Emil给出的示例中,无论您以哪种方式对该矩阵进行分区,都无法获得有效的对进行测试,因此您可以立即得出结论:没有这样的路径。