[英]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.