我正在为(链表)Graph实现DFS。
我的图表结构示例:http://i.imgur.com/Pm9jC.png
如您所见,有许多名为“a”的节点。它们在顶点方面是相同的,但它们在节点方面实际上是不同的。实现DFS涉及在某个时刻将“a”标记为已访问。这看起来很简单,但我希望你能在这里看到我的问题。有许多“a”标记为访问。我希望我在这里做错了。
问题: - 首先将“a”标记为已访问并将其推入堆栈。这有效地将第一邻接链表中的节点“a”标记为已访问,但其他邻接链表中的所有其他节点“a”仍标记为“未访问”。 - 然后考虑“b”,因为它是第一个未访问的相邻顶点到“a”。将其标记为已访问并将其推入堆栈。 - 现在我们正在探索“b”。从第二个邻接链表,相邻的顶点到“b”是“a”,这个是未访问的,所以我们再次将它推到堆栈上。错!
当然,我可以编写一个markVisit($ vertex)方法,将所有出现的“a”标记为一次访问,但我认为我在上面的实现中没有正确的方法。谢谢你的帮助。
答案 0 :(得分:0)
markVisit($vertex)
应该是正确的,你需要记住你已经访问过的顶点。 DFS涉及顶点,没有边缘。