美文网首页
深度优先搜索-查找路径

深度优先搜索-查找路径

作者: KeDaiBiaO1 | 来源:发表于2017-10-17 11:12 被阅读0次
实现:

维护3个变量(boolean[] marked, int[] edgeTo, int s)
marked 记录是否访问过该顶点,
edgeTo 记录路径上的上一个顶点,
s 记录路径的起始顶点。

  1. 遍历图的时候,先把marked初始化 元素全部都为FALSE,这样如果没有连通的顶点就会还是FALSE,而可以遍历到的顶点修改为TRUE。
  2. 记录edgeTo edgeTo是从起始顶点 s 出发,下一个顶点保存的是起始顶点的位置。
注意:
  1. 在递归的时候,会根据marked是否已经访问过,这样遍历过的其他顶点就会在递归的时候跳过。
  2. edgeTo数组中记录的是当前顶点到起始顶点路径上的上一个顶点。在初始化变量之后,就可以遍历数组(从结束顶点开始,往上查找)直到找到等于起始顶点的值结束,路径上的值都push到Stack中。
    private boolean[] marked;
    private int[] edgeTo;
    private int s;
    public DepthFirstPathsR(Graph G, int s){
        marked = new boolean[G.V()];
        edgeTo = new int[G.V()];
        this.s = s;
        dfs(G, s);
        System.out.println();
    }
    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 hasPath(int v){
        return marked[v];
    }
    public Iterable<Integer> pathTo(int v){
        if(!hasPath(v)) return null;
        Stack<Integer> path = new Stack<>();
        for (int i = v; i != s; ) {
            path.push(i);
            i = edgeTo[i];
        }
        path.push(s);
        return path;
    }

相关文章

  • 深度优先搜索-查找路径

    实现: 维护3个变量(boolean[] marked, int[] edgeTo, int s)marked 记...

  • 搜索

    一、深度优先搜索 图深度优先遍历、深度优先搜索算法求有权图两点最短路径 二、广度优先搜索 图广度优先遍历、广度优先...

  • 《算法》笔记 10 - 无向图

    表示无向图的数据结构邻接表数组 深度优先搜索深度优先搜索寻找路径深度优先搜索的性能特点 广度优先搜索 两种搜索方式...

  • 图搜索算法实现

    图的深度优先搜索遍历和广度优先搜索遍历,深度优先搜索借助一个辅助栈实现,一直顺着路径往前走,每次都取出栈顶元素,一...

  • 栈和 DFS

    栈和 DFS 与 BFS 类似,深度优先搜索(DFS)也可用于查找从根结点到目标结点的路径。在本文中,我们提供了示...

  • 深度优先和广度优先查找以及拓扑排序

    深度和广度优先查找 归属:蛮力法 简称:DFS(深度优先查找)、BFS(广度优先查找) 思想:DFS: 深度优先查...

  • python数据结构教程 Day16

    本章内容 通用深度优先DFS算法 单源最短路径问题 最小生成树 一、通用深度优先DFS算法 一般的深度优先搜索目标...

  • 2018-09-26

    算法 二分查找 运行结果 选择排序 运行结果 快速排序 运行结果 广度优先搜索 运行结果 深度优先搜索 运行结果 ...

  • 深度优先搜索

    深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索方法。 使用递归可以很好地实现深度优先搜索。 例题1 有n件...

  • leetCode112:Path Sum

    关键字:树、深度优先搜索 难度:easy 题目大意:从给定的二叉树中,查找是否存在root->leaf路径和等于s...

网友评论

      本文标题:深度优先搜索-查找路径

      本文链接:https://www.haomeiwen.com/subject/rewruxtx.html