• 基础算法 --- DFS(深度优先搜索)


    个人理解

    DFS(深度优先搜索)和BFS类似,也是一种简便的图搜索算法,它的主要思想是:访问每一个分支到最深位置,直到不能继续为止。

    图解

    现在我们要找到从A节点到G节点的路径(不一定是最优的),DFS步骤如下:

    1、从根节点A开始,选择节点B的路径,并回溯,直到到达节点E,无法再深入

    2、接下来回溯到A,选择节点C的路径,选择E节点时,发现E已经被访问过了,回溯到C节点

    3、选择节点F的路径,并且回溯,直到到达G节点

    4、这样,A节点到G节点的路径为:A->C->F->G

    伪代码:

    boolean DFS(Node root, Node target) {

      Set<Node> vistised;

      Stack<Node> stack;

      add root node to vistised;

      add root node to stack;

      while(stack is not empty) {

        Node cur = top node of stack;

        if (cur == target) return true;

        for (Node next : child nodes of cur) {

          if (next is not visisted) {

            add next to vistised;

            add next to stack;

          }

        }

        remove cur from stack;

      }

      return false;

    力扣对应例题

    https://leetcode-cn.com/problems/binary-tree-inorder-traversal/

    https://leetcode-cn.com/problems/decode-string/

    https://leetcode-cn.com/problems/keys-and-rooms/

  • 相关阅读:
    【[Offer收割]编程练习赛12 B】一面砖墙
    【[Offer收割]编程练习赛12 A】歌德巴赫猜想
    【codeforces 779E】Bitwise Formula
    Java Web整合开发(85)
    数字
    T2602 最短路径问题 codevs
    P3378 堆【模板】 洛谷
    T1013 求先序排列 codevs
    P1717 钓鱼 洛谷
    P2085 最小函数值 洛谷
  • 原文地址:https://www.cnblogs.com/sniffs/p/12049054.html
Copyright © 2020-2023  润新知