У меня возникла проблема с реализацией обхода DFS в java. Моя проблема, я думаю, это метод «dfs» в кодировке Graph.java I. Он не возвращает требуемый вывод, давая ему определенный вход. Мой код ниже вместе со своим входом и желаемым выходом. Может ли кто-нибудь помочь мне решить эту проблему в моем коде. Благодарю.Поиск по графу java
Graph.java
public class Graph {
ArrayList<Vertex> Vertices=new ArrayList<Vertex>();
Stack<Integer> stack=new Stack<Integer>();
public Graph(){
Scanner in=new Scanner(System.in);
String sz=in.nextLine();
int size=Integer.parseInt(sz);
for(int i=0; i<size; i++) addVertex();
String s=in.nextLine();
while(!s.equals("-1")){
String[] arr=s.split(",");
int v1=Integer.parseInt(arr[0]);
int v2=Integer.parseInt(arr[1]);
addEdge(v1,v2);
s=in.nextLine();
}
//Vertex v=Vertices.get(2);
//System.out.println(dfs(v));
}
public static void main(String[] args){
new Graph();
}
public void addVertex(){
Vertex v=new Vertex(Vertices.size());
Vertices.add(v);
}
public Vertex getVertex(int n){
return Vertices.get(n);
}
public void addEdge(int n, int m){
Vertex v1=Vertices.get(n);
Vertex v2=Vertices.get(m);
v1.addAdjacency(v2);
v2.addAdjacency(v1);
}
public void dfs(Vertex obj){
obj.marked=true;
int k=0;
for(Vertex v:obj.Vertices){
Vertex d=v;
if(!d.marked){
d.parent=obj;
k=d.parent.vertexNumber;
stack.push(k);
dfs(d);
}
}
}
}
Vertex.java
public class Vertex {
int vertexNumber;
Vertex parent = null;
boolean marked = false;
LinkedList<Vertex> Vertices = new LinkedList<Vertex>();
public Vertex(int num) {
vertexNumber = num;
}
public void addAdjacency(Vertex object) {
Vertices.add(object);
}
public boolean isAdjacent(Vertex object) {
if (Vertices.contains(object))
return true;
else
return false;
}
public int getDegree() {
return Vertices.size();
}
Я отредактировал метод DFS – amine
Метод 'dfs' возвращает' void'. Как вы ожидаете, что что-либо будет напечатано с помощью System.out.println (dfs (v)); '? Он даже не компилируется. –
Позвольте мне исправить это, его следует прокомментировать – amine