我正在使用DFS算法,并且希望将每个边标记为已访问,方法是查找节点并将其替换为一些标记,但如果将邻接列表设置为存储与访问的节点相对应的值,这会增加查找时间。矩阵会占用大量空间。什么是最好的算法呢?在图中访问边
Q
在图中访问边
0
A
回答
0
你只需要维护一组顶点对。例如Java HashMap<Pair<Vertex, Vertex>>
。在Python中,包含2元素元组的Set
。
边缘的访问发生在您枚举刚发现的新顶点的后代并将它们添加到DFS堆栈中。如果您使用的是递归DFS,那么就像您对每个后代进行递归调用一样。这里的堆栈版本:
dfs(graph)
visitedVertices = \emptyset
visitedEdges = \emptyset
// Try all vertices as search roots
for each vertex r in graph
push r onto empty stack
while notEmpty(stack)
u = pop stack
if u not in visitedVertices
add u to visitedVertices
foreach v such that u->v is in graph
add (u,v) to visitedEdges // Visit the edge
push v on stack
说了这么多,我不知道你为什么要这么做。正确实施DFS自然而然地遍历每个边缘一次。您可以通过查看上面的算法来证明这一点。访问(u,v)
只有在以前从未访问u
时才有可能。
也许你有一些其他的线程正在看搜索进度,或者实际上是在你访问时向边缘添加其他信息?
相关问题
- 1. 访问中的图(节点和边)
- 2. 升压图表访问边缘
- 3. 如何从nav中的已访问图像中删除边框?
- 4. 在图表访问无特殊边缘在至少时间
- 5. 在视图中访问viewbag
- 6. ggplot2中的geom_map边框 - 重新访问
- 7. 访问多个UIAlertViews边界的问题
- 8. 在Swift中访问PaintCode中的图像
- 9. 在CakePHP视图中访问关联
- 10. 在变量中访问图像网址
- 11. django-allauth:在视图中访问“socialaccount_set.all”
- 12. 在视图中访问ViewModel属性
- 13. 在视图中访问类变量
- 14. 在OpenCV中访问图像的元素
- 15. 在视图中访问路由值Mvc.net
- 16. iOS在AppDelegate中访问模态视图
- 17. Angular2Fire在存储中访问图像
- 18. 在图像数组中循环访问
- 19. 在ImageAdapter中访问XML图像数组
- 20. 在R中访问控制图结果?
- 21. 在Java中访问图像ME
- 22. 在列表视图中访问“th”
- 23. 在PhantomJS中访问图像尺寸
- 24. ASP.NET - 在视图中访问ViewBag
- 25. 在部分视图中访问模型
- 26. 在html中访问资源(图片等)
- 27. 在Go地图中访问嵌套值
- 28. Backbone:无法在视图中访问'this.model。*'
- 29. 在C中访问Excel图形#
- 30. 在表视图中错误访问 - iOS
你需要记录边缘被访问?为了让你迭代两次边,你需要两次遍历同一个节点。跟踪访问节点应该更简单。你究竟想要做什么? –
@ A.Sokol我正在访问一个边缘,我需要记录它,所以我不会再访问,虽然我会如果这样的情况存在1-> 2 && 2-> 1.我需要打印的顺序在哪我访问边缘,所以我需要存储它们。 – idk
那么你为什么不随意打印呢? – CodingYoshi