使用DFS获取图表的清晰度

时间:2015-12-10 12:38:11

标签: java graph

我正在制作一个算法来确定图表的关节。我没有去除顶点的边缘,而是因为是加权图而不愿访问该顶点。

我遇到的问题是,当我调用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;
}

感谢。

1 个答案:

答案 0 :(得分:0)

我认为你错过了root作为一个清晰点的情况,这就像 - 如果该点是root,那么它应该至少有2个孩子作为清晰点。

您可以查看以下链接,这将为您提供关于发音点的非常好的描述。

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