Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用DFS获取图形的关节_Java_Graph - Fatal编程技术网

Java 使用DFS获取图形的关节

Java 使用DFS获取图形的关节,java,graph,Java,Graph,我正在做一个算法来确定一个图形的清晰度。与其删除顶点的边,我更喜欢不访问该顶点,因为它是一个加权图 我遇到的问题是,当我调用dfs(0,visted,v)时,它会说顶点0也是一个关节,而不是。如果我更改第一个参数,我经过的顶点表示为铰接 我得到的是: Articulations: 0 2 5 8 预期: Articulations: 2 5 8 代码: private boolean未连接(int v){ 访问的布尔值[]=新布尔值[numVertex]; 对于(int i=0;i

我正在做一个算法来确定一个图形的清晰度。与其删除顶点的边,我更喜欢不访问该顶点,因为它是一个加权图

我遇到的问题是,当我调用
dfs(0,visted,v)
时,它会说顶点0也是一个关节,而不是。如果我更改第一个参数,我经过的顶点表示为铰接

我得到的是:

Articulations:
0
2
5
8
预期:

Articulations:
2
5
8
代码:

private boolean未连接(int v){
访问的布尔值[]=新布尔值[numVertex];
对于(int i=0;i

谢谢。

我想你错过了根作为一个连接点的例子,它是- 如果该点是根,则至少应有2个子节点作为连接点

你可以看看下面的链接,这会给你一个关于关节点的很好的描述

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;
}