使用堆栈在DFS中查找节点之间的路径

时间:2017-05-26 21:25:02

标签: java graph path stack dfs

根据这张图片,我试图编写一个程序,找到从顶点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;
}

1 个答案:

答案 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) {

    }

}