码迷,mamicode.com
首页 > 其他好文 > 详细

使用深度优先搜索查找路径

时间:2018-05-15 22:39:02      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:first   路径   span   null   基础上   http   www   扩展   个数   

给定图G及起点s,查找从s到其他顶点的路径。

 

 

设计一个类实现该算法,类的API如下:

技术分享图片

 

 

基于深度优先搜索实现路径查找,该算法扩展深度优先搜索,在原算法的基础上添加一个实例变量edgeTo[],这个数组用于记录每个与s连通的顶点回到s的路径。

 如下图:

技术分享图片

edgeTo[]的值为:

技术分享图片

节点1与2(数组下标表示节点)存储的为0,表示由节点1或2可以到节点0,节点3存储的为2,表明节点3可以到节点2 。那么由节点0到节点3的路径为0-2-3。

 

实现代码如下:

public class DepthFirstPaths {

    private int s;
    private boolean[] marked;
    private int[] edgeTo;

    public DepthFirstPaths(Graph G, int s) {
        this.s = s;
        marked = new boolean[G.V()];
        edgeTo = new int[G.V()];
        dfs(G, s);
    }

    private void dfs(Graph G, int v) {
        marked[v] = true;
        for (int w:G.adj(v)) {
            if (!marked[w]) {
                edgeTo[w] = v;
                dfs(G, w);
            }
        }
    }

    public boolean hasPathTo(int v) {
        return marked[v];
    }


    public Iterable<Integer> pathTo(int v) {
        if (!marked[v]) return null;
        Stack<Integer> path = new Stack<>();
        for (int x = v; x != s; x = edgeTo[x])
            path.push(x);
        path.push(s);
        return path;
    }

}

 

使用深度优先搜索查找路径

标签:first   路径   span   null   基础上   http   www   扩展   个数   

原文地址:https://www.cnblogs.com/deltadeblog/p/9042913.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!