Java 如何在图形中查找连接器?

Java 如何在图形中查找连接器?,java,graph,depth-first-search,breadth-first-search,undirected-graph,Java,Graph,Depth First Search,Breadth First Search,Undirected Graph,我在这里有点挣扎,因为老实说,我的大脑被炸了,我不知道该怎么办 我的任务是在一个无向的、未加权的图中找到连接器 该任务声称:在无向图中,如果至少有两个其他顶点x和w,且x和w之间的每条路径都经过v,则顶点v是一个连接符 别误会我,我明白这意味着什么,但我做这件事是无可救药的。当我浏览这个图表时(建议我使用DFS),我到底应该做什么 我只想在正确的道路上完成这件事 非常感谢您的帮助 您描述的连接器是切割垂直(或接合点):) 为了找到无向图中的所有连接点,我们可以使用一种改进的DFS算法。一般的想法

我在这里有点挣扎,因为老实说,我的大脑被炸了,我不知道该怎么办

我的任务是在一个无向的、未加权的图中找到连接器

该任务声称:在无向图中,如果至少有两个其他顶点x和w,且x和w之间的每条路径都经过v,则顶点v是一个连接符

别误会我,我明白这意味着什么,但我做这件事是无可救药的。当我浏览这个图表时(建议我使用DFS),我到底应该做什么

我只想在正确的道路上完成这件事


非常感谢您的帮助

您描述的连接器是切割垂直(或接合点):)

为了找到无向图中的所有连接点,我们可以使用一种改进的DFS算法。一般的想法是在图上运行DFS,同时用两个变量标记每个节点n:整数低位(n)和整数DFS(n)。如果节点v的邻居w具有LOW(w)>=dfs(v),则节点v是连接点。伪代码描述如下:

Execute DFS(v)
When a vertex v is first discovered, LOW(v) = dfs(v) 
For each of v’s neighbors w
    if w is undiscovered 
        execute DFS(w)
        LOW(v) = min of {LOW(v), LOW(w)}
        if LOW(w) ≥ dfs(v), v is connector!!!!!Store it.
    else if w is v’s parent, do nothing
    else (w is not v’s parent but has already been discovered)
        LOW(v) = min of {LOW(v), dfs(w)}

该算法的运行时间与基本的DFS算法相同:O(V+E),其中V是图中的顶点数,E是图中的边数。

我认为要成为连接符,顶点必须是其直接邻居的连接符,因此:对于图中的每个顶点V,获取其所有邻居。使用DFS获取每对邻居n1、n2之间的所有路径。如果所有获得的路径都通过v,则v是n1、n2之间的连接器。