Algorithm 给出从图中删除顶点的顺序,使其不会';不要断开图形
这是史蒂文·斯基纳(Steven Skiena)提出的算法设计问题(用于面试准备): 图G的一个连接点是一个顶点,它的删除断开了G。设G是一个有n个顶点和m条边的图。给出一个简单的O(n+m),该O(n+m)可以为n个顶点找到一个删除顺序,这样就没有删除会断开图形 我是这样想的:Algorithm 给出从图中删除顶点的顺序,使其不会';不要断开图形,algorithm,graph,Algorithm,Graph,这是史蒂文·斯基纳(Steven Skiena)提出的算法设计问题(用于面试准备): 图G的一个连接点是一个顶点,它的删除断开了G。设G是一个有n个顶点和m条边的图。给出一个简单的O(n+m),该O(n+m)可以为n个顶点找到一个删除顺序,这样就没有删除会断开图形 我是这样想的: 在图上运行DFS,并不断更新每个节点最早的可到达祖先(基于此,我们决定它是桥接节点、父节点还是根节点) 如果我们找到一个叶节点(顶点)或一个不是铰接顶点的节点,请删除它 在DFS的末尾,我们将剩下图中所有被发现是连接顶
每一步都不超过O(m+n)假设图是连通的,那么任何随机节点都会到达一个子图,该子图的生成树可以按顺序删除,而不会破坏图的连通性。以这种方式重复,直到图形全部消失。如果我们总是逐个删除树的叶子,树的其余部分仍保持连接。一种特殊的方法是在使用DFS或BFS遍历图形时为每个顶点指定一个预订单号。按降序对顶点排序(基于预排序编号)。从图中按该顺序删除顶点。请注意,树叶总是先被删除
你就不能做一个BFS然后扭转结果吗?删除的节点将始终是叶节点wrt。连接到剩余的BFS树,使图形保持连接。或者,后期DFS也可以工作。只要你有一棵生成树,并且只移除树中的叶子,剩下的图就会保持连接。@哈马尔,你能解释一下后序DFS的想法吗?顶部排序,将从左到右排序节点,或者更确切地说,它给我们一个处理图顶点的顺序,它不关心树的连接。