在 PHP 工作 2 年后,我将返回 Java。对不起,如果这看起来很愚蠢:
这是代码(图的深度优先遍历):
public List<List<Edge>> paths = new ArrayList<>();
public void traverse(Edge edge, List<Edge> currentPath){
String vertex = graph.getEdgeTarget(edge);
if(edge!=null) currentPath.add(edge);
if(vertex=="TARGET_VERTEX"){
System.out.println(currentPath); // prints fine
paths.add(currentPath); // elements are empty at end of reccursion
if(edge!=null) currentPath.remove(edge);
return;
}
for(Edge e : graph.outgoingEdgesOf(vertex)){
traverse(e, currentPath);
}
if(edge!=null) path.remove(edge);
}
public void search(){
//graph is initalized, vertices and edges are added
for(Edge e : graph.outgoingEdgesOf("START_VERTEX")){
traverse(e, new ArrayList<Edge>());
}
System.out.println("############################");
System.out.println(paths);
System.out.println(paths.size());
}
有人可以解释为什么递归结束时paths
有空元素,以及如何使其包含我需要的路径吗?
似乎通过引用传递让我成为一个问题......
ArrayList
有一个浅clone()
方法,它不会复制元素(根据 JavaDoc)。
我是否需要创建一个临时变量来手动复制currentPath
(遍历值)?
我仍然对Java中的值传递和引用传递有点困惑,在PHP中使用传递引用(&variable
.)很容易区分。
编辑所以我不会抱怨字符串比较