假设我们有一个矩阵M x N
,给定两个随机指定的exit
和entrance
,
找到从entrance
到exit
的路径(向上,向下,向左,向右),只覆盖矩阵中的每个节点一次?
答案 0 :(得分:3)
这显然不总是可以解决的。假设你有这个矩阵,其中A是入口,B是退出:
+---+---+
| A | |
+---+---+
| | B |
+---+---+
你是如何解决这个问题的?
答案 1 :(得分:0)
你可以尝试的一件事是这样的:
将您的矩阵拆分为两个,以便entrance
和exit
位于不同的分区中。然后,对于在分割上形成“桥”的每个有效单元对,递归地查找是否存在从entrance
到其分区中的单元的有效路径,以及从该单元的对到{{1}的有效路径}。如果没有一对工作,那么我们找不到路径(因为如果存在这样的路径,它必须越过该分区最终)。
使用一个小例子,假设我们有
exit
并将其拆分在中间以给出
+---+---+
| A | B |
+---+---+
| | |
+---+---+
与< - >是唯一有效的“桥梁”。命名那对“C”和“D”中的单元格,然后我们有
+---+ +---+
| A | | B |
+---+ +---+
| | <-> | |
+---+ +---+
我们现在找到从A到C以及从D到B的路径。将这些迷你路径拼接在一起,我们得到A到C到D到B.
在Emil给出的示例中,无论您以哪种方式对该矩阵进行分区,都无法获得有效的对进行测试,因此您可以立即得出结论:没有这样的路径。