我正在制作一个算法来确定图表的关节。我没有去除顶点的边缘,而是因为是加权图而不愿访问该顶点。
我遇到的问题是,当我调用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;
}
感谢。
答案 0 :(得分:0)
我认为你错过了root作为一个清晰点的情况,这就像 - 如果该点是root,那么它应该至少有2个孩子作为清晰点。
您可以查看以下链接,这将为您提供关于发音点的非常好的描述。
http://www.geeksforgeeks.org/articulation-points-or-cut-vertices-in-a-graph/