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