【发布时间】:2016-10-15 15:05:35
【问题描述】:
我在 java 中实现 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 方法
-
你
dfs方法返回void。您如何期望使用System.out.println(dfs(v));打印任何内容?它甚至不会编译。 -
让我纠正一下,它应该被注释掉
-
如果您希望我们提供帮助,您确实需要解释您的示例输出。你没有说这是哪个源顶点的结果(它看起来像你的代码中的顶点 2?),也没有说
1:0的真正含义或它应该是什么。这些应该是您问题的一部分。 -
输出样本不清楚。
标签: java graph depth-first-search