标签: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