簡體   English   中英

使用DFS獲取圖形的清晰度

[英]Get articulations of a graph with DFS

我正在制定一種算法來確定圖形的清晰度。 我寧願不訪問該頂點,也不要刪除頂點的邊緣,因為它是加權圖。

我的問題是,當我調用dfs(0, visited, v)它說頂點0也是一個關節,而不是。 如果我更改第一個參數,那么我通過的頂點就是一個關節。

我得到了:

Articulations:
0
2
5
8

預期:

Articulations:
2
5
8

碼:

private boolean isConnected(int v) {
    boolean visited[] = new boolean[numVertex];

    for (int i = 0; i < numVertex; i++)
        visited[i] = false;

    dfs(0, visited, v);

    return allVisited(visited);
}

private void dfs(int source, boolean[] visited, int v) {
    visited[source] = true;

    for (int i = 0; i < numVertex; i++)
        if (graph[source][i] != NO_EDGE && source != v && !visited[i])
            dfs(i, visited, v);

}

private boolean allVisited(boolean[] visited) {
    boolean all = true;
    int i = 0;

    while (i < visited.length && all) {
        all = visited[i];
        i++;
    }

    return all;
}

謝謝。

我認為您錯過了將根作為鉸接點的情況,因為-如果該點是根,那么它至少應有2個孩子成為鉸接點。

您可以查看下面的鏈接,這將為您提供有關關節連接點的非常好的描述。

http://www.geeksforgeeks.org/articulation-points-or-cut-vertices-in-a-graph/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM