【发布时间】:2019-04-13 04:20:24
【问题描述】:
我正在尝试找到一个方法 countVertices(),它需要使用 DFS 返回给定顶点的同一连接组件中的顶点数。
我无法理解为什么当我的图表有 3 个连接组件(包括父组件)时我总是得到 2。我尝试的所有测试都出错了
我的方法代码如下所示:
public static int countVertices(Graph g, Graph.Vertex v) {
Set<Graph.Vertex> known = new HashSet<>();
int num = 0;
if(g == null || v == null)
return 0;
for(Graph.Vertex u : g.getAllVertices()) {
if(!known.contains(u)) {
num++;
DFS(g, u, known);
}
}
return num;
}
public static void DFS(Graph g, Graph.Vertex v, Set<Graph.Vertex> known) {
known.add(v);
for(Graph.Vertex vertex : g.getNeighbours(v)) {
if(!known.contains(vertex))
DFS(g, vertex, known);
}
}
我在main() 方法中尝试了以下方法:
public static void main(String[] args){
Graph g = new Graph();
Graph.Vertex v = new Graph.Vertex(1);
Graph.Vertex w = new Graph.Vertex(2);
Graph.Vertex x = new Graph.Vertex(3);
Graph.Vertex y = new Graph.Vertex(4);
g.addVertex(v);
g.addVertex(w);
g.addVertex(x);
g.addVertex(y);
g.addEdge(v, w);
g.addEdge(w, y);
System.out.println(countVertices(g, v)); // this outputs 2, it should be 3
System.out.println(countVertices(g, x)); // this outputs 2, it should be 1
}
我无法弄清楚我做错了什么?我将不胜感激。
编辑:
public static int countVertices(Graph g, Graph.Vertex v) {
Set<Graph.Vertex> known = new HashSet<>();
int num = 1;
if(g == null || v == null)
return 0;
//for(Graph.Vertex u : g.getNeighbours(v)) {
if(!known.contains(v)) {
num++;
DFS(g, v, known);
}
//}
return num;
}
【问题讨论】:
标签: java algorithm graph depth-first-search