我有一个包含N个节点和E个边缘的图G.每个边都是不定向的.目标是找到no.关键节点
在删除图形时使图形断开的节点称为关键节点.
目标是找到不.图中的这些节点.
解决方案是: –
对于属于图表的每个节点,
从图表中删除它,
从剩余的图中选择一个节点,
执行dfs,
如果我们能够到达任何地方那么它就不是一个关键的节点.
该解决方案是O(N * E)或最差情况O(N ^ 3).
是否有O(N ^ 2)溶液或O(E)溶液,因为N ^ 3有点太慢.
最佳答案 关键节点是一个节点,当删除时,会将图形切割成2个或更多不相交的子图.
因此,关键节点是连接到仅通过该关键节点连接的2个或更多个子图的节点.
可能的解决方案可能是这样的:
>对于图G中的每个节点i:
> list L:直接连接到节点i的所有节点
>如果在列表L中存在2个节点u和v,那么没有路径通过v连接u而不是i,那么i是关键节点
示例(在Java中):
public class CrucialNode
{
public static ArrayList<Node> crucialVertices (Graph g)
{
ArrayList<Node> crucial = new ArrayList<Node> ();
for (Node n : g.getV()) if (isCrucial(g,n)) crucial.add(n);
return crucial;
}
public static boolean isCrucial (Graph g, Node n)
{
Graph h = new Graph(g);
h.removeVertex(n);
for (Node u : n.getNext())
{
for (Node v : n.getNext())
{
if (u.equals(v)) continue;
if (!h.connected(u,v)) return true;
}
}
return false;
}
}