algorithm - 找出无向图的最大子集

标签 algorithm graph undirected-graph

输入:一个顶点列表和一个邻接列表。

输出:好的顶点的最大子集。

(如果子集中至少有 2 个相邻顶点和至少 2 个不相邻顶点,则我们称该子集中的顶点为“好顶点”。)

示例 1:

Vertexes: [1, 2, 3, 4, 5]
Relations: [(1,2), (1,3), (3,4), (3,5), (4,5)]

example

output: []

例子2:
example2

output: [1,2,3,4,5,6]

因为对于输出中的每个顶点,它至少有 2 个顶点与其相连,并且至少有 2 个顶点未与其相连。

最佳答案

如果一个顶点在图中至少有两个邻居和至少两个非邻居,则称它为“okay”。顶点必须可以在输出中。

从图中删除所有不合格的顶点。执行此操作时,以前正常的顶点可能会因为邻居或非邻居用完而不再正常;这些顶点也不能在输出中,所以像对待任何其他不正常的顶点一样对待它们并将它们也移除。继续下去,直到所有剩余的顶点都没有问题。

输出剩余顶点的集合。

关于algorithm - 找出无向图的最大子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36415840/

相关文章:

algorithm - 数字形成

c++ - Boost.Graph 库:如何使用 boost::is_isomorphism 命名顶点

algorithm - 无向图中的循环数

javascript - 算法按给定数字从最近到最远对数组进行排序

algorithm - 图遍历确保首先访问 parent

java - 将 View 从一项 Activity 传递到另一项 Activity

graph - 在有向加权图中找到平均权重最高的树

c++ - 使用迭代DFS而不是递归DFS的第一个DFS路径

algorithm - 证明最小生成树的性质

c# - 对于相同位置的点变化,长纬度略有变化