Я пытаюсь найти метод countVertices()
, который должен возвращать количество вершин в том же связанном компоненте данной вершины, используя DFS.
Я не могу понять, почему я всегда получаю 2, когда есть 3 связанных компонента (включая родительский) для моего графика. Это не так для всех тестов, которые я пробовал
Мой код для метода выглядит так:
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
}
Я не могу понять, что я делаю не так? Буду признателен за любую помощь.
Edit:
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;
}