命令从图形中删除顶点,以便它不会断开图形

时间:2012-11-21 02:18:13

标签: algorithm graph

这是Steven Skiena的算法设计问题(面试准备):

图G的关节顶点是其删除断开G的顶点。设G是具有n个顶点和m个边的图。给出一个简单的O(n + m),它找到n个顶点的删除顺序,这样就不会删除图形。

这就是我的想法:

  1. 在图表上运行DFS并不断更新每个节点最早的可到达祖先(根据这些祖先决定它是桥切节点,父可爱节点还是根节点)

  2. 如果我们发现叶子节点(顶点)或不是关节顶点的节点将其删除。

  3. 在DFS结束时,我们将留下图中所有被发现为关节顶点的节点

  4. 图形将保持连接,因为关节顶点完好无损。我已经在几张图上尝试了它,它似乎有效,但对于这本书来说感觉太简单了。

4 个答案:

答案 0 :(得分:1)

  1. 使用DFS跟踪每个顶点的退出时间;
  2. 按照记录的退出时间顺序删除顶点;

答案 1 :(得分:0)

分为两步:

  1. 使用任何遍历算法
  2. 制作图表DAG
  3. 做拓扑排序
  4. 每一步都完成而不超过O(m + n)

答案 2 :(得分:0)

假设图形已连接,则任何随机节点都会到达一个子图,其生成树可以按顺序删除,而不会破坏图的连通性。以这种方式重复,直到图表全部消失。

答案 3 :(得分:-1)

如果我们总是逐个删除树的叶子,则树的其余部分保持连接。这样做的一种特殊方式是在使用DFS或BFS遍历图形时为每个顶点分配预订号。按降序对顶点排序(基于预订号)。从图中按顺序删除顶点。请注意,始终首先删除叶子。