根据这张图片,我试图编写一个程序,找到从顶点1到7的所有路径。
正好像这个输出。 我在使用堆栈的代码中使用了 DFS ,但是我收到了堆栈溢出错误。 我想让列表中存储的每个输出都像这样打印:
1--> 2--> 5--> 8--> 7
1--> 2--> 5--> 7
1--> 2--> 5--> 3--> 6--> 7
--------------------------------
1--> 3--> 6--> 7
1--> 3--> 5--> 7
1--> 3--> 5--> 8--> 7
我该怎么做?
这是我的代码
public List<Integer> m(int root,int destination){
Stack<Integer> stack=new Stack<>();
List<Integer> list=new ArrayList<>();
Set<Integer> seen=new HashSet<>();
stack.push(root);
seen.add(root);
list.add(root);
while (!stack.isEmpty()&&!seen.contains(destination)){
for (Edge y:neighbors.get(root)){
if(!seen.contains(y.end)){
stack.push(y.end);
seen.add(y.end);
list.add(y.end);
m(stack.pop(),destination);
}
}
}
return list;
}
答案 0 :(得分:0)
我认为这应该是单独的方法
Stack<Integer> stack = new Stack<>();
List<Integer> list = new ArrayList<>();
Set<Integer> seen = new HashSet<>();
stack.push(root);
seen.add(root);
list.add(root);
像
这样的东西class PathFinder {
private Stack<Integer> stack = new Stack<>();
private List<Integer> list = new ArrayList<>();
private Set<Integer> seen = new HashSet<>();
public List<Integer> find(int root, int destination) {
// perhaps, it can be in the m()
stack.push(root);
seen.add(root);
list.add(root);
m(root, destination);
return list;
}
private void m(int root, int destination) {
}
}