0

我正在为(链表)图实现 DFS。

我的图形结构示例:http: //i.imgur.com/Pm9jC.png

如您所见,有许多名为“a”的节点。它们在顶点方面是相同的,但在节点方面它们实际上是不同的。实施 DFS 涉及在某个时间点将“a”标记为已访问。这看起来很容易,但我希望你能在这里看到我的问题。有许多“a”标记为已访问。我希望我在这里做错了什么。

问题: - 首先将“a”标记为已访问并将其推送到堆栈 s。这有效地将第一个邻接链表中的节点“a”标记为已访问,但其他邻接链表中的所有其他节点“a”仍标记为“未访问”。- 然后考虑“b”,因为它是“a”的第一个未访问的相邻顶点。将其标记为已访问并将其压入堆栈 s。- 现在我们正在探索“b”。从第二个邻接链表中,“b”的相邻顶点是“a”,这个是未访问的,所以我们再次将它压入堆栈。错误的!

当然,我可以编写一个 markVisit($vertex) 方法,将所有出现的“a”标记为一次已访问,但我认为我在上面的实现中没有正确的方法。谢谢你的帮助。

4

1 回答 1

0

markVisit($vertex)应该是正确的,你需要记住你已经访问过哪些顶点。DFS 关注的是顶点,而不是边。

于 2011-10-18T17:23:32.210 回答