2
자바에서 DFS 트래버 설을 구현하는 데 약간의 문제가 있습니다. 제 생각에는 제가 코딩 한 Graph.java의 'dfs'메소드입니다. 그것은 특정 입력을 제공하는 필수 출력을 리턴하지 않습니다. 내 코드는 입력 및 원하는 출력과 함께 아래에 있습니다. 누군가 내 코드에서이 문제를 해결하도록 도울 수 있습니까? 감사.깊이 그래프 우선 검색
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