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