zoukankan      html  css  js  c++  java
  • 基础算法 --- 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/

  • 相关阅读:
    简述序列化与反序列化
    更新Kali源&&Docker vulhub 安装
    超级弱口令爆破工具&&hydra
    通达OA任意用户登录
    读书笔记——白帽子讲Web安全
    骑士CMS搭建与利用
    记一次DVWA的SQL注入测试
    网络基础
    C#类对象的事件定义
    [开源]FreeSCADA的通道数据与控件属性关联以及自动刷新机制研究
  • 原文地址:https://www.cnblogs.com/sniffs/p/12049054.html
Copyright © 2011-2022 走看看