zoukankan      html  css  js  c++  java
  • 广度优先算法(BFS)与深度优先算法(DFS)

    一、广度优先算法BFS(Breadth First Search)

    基本实现思想

            (1)顶点v入队列。

            (2)当队列非空时则继续执行,否则算法结束。

            (3)出队列取得队头顶点v;

            (4)查找顶点v的所以子节点,并依次进入队列;

            (5)转到步骤(2)。

     python伪代码:

      def BFS(root)

        Q=[]

        Q.append(root[0])

        while len(Q)>0:

          node=Q.pop(0)

          print (node)

          #将所有子节点入队列

          for i in node_child:

            Q.append(node_child[i])

    :该算法很巧妙的利用了队列的先进先出策略。

    二、深度优先算法DFS(Depth First Search)

    基本思想: 

    递归实现:

                 (1)访问顶点v,打印节点;

                 (2)遍历v的子节点w,while(w存在),递归执行该节点;

    代码:

      /布尔型数组Visited[]初始化成false
      void DFS(Vetex v)
      {
          Visited[v] = true;
          for each w adjacent to v
              if (!Visited[w])
                  DFS(w);
      }

    非递归实现:

                 (1)访问顶点v,顶点v入栈S,打印输出顶点,visited[v]=1

                  (2)while(栈S非空)

                          x=栈S的顶元素(不出栈);

                          if(存在并找到未被访问的x的子结点w)

                            访问w,打印输出,visited[w]=1;w进栈;

                          else

                            x出栈;

     注:visited[x]=1,标记该节点已被访问

  • 相关阅读:
    socket发送文字、图片、文件---基于python实现
    python socket详解
    loadrunner socket协议问题归纳(6)
    Hash算法解决冲突的四种方法
    while循环 运算符和编码
    python初识
    js中forEach,for in,for of循环的用法详解
    设计模式之MVC和MVT
    mac 下的 tree 命令 终端展示你的目录树结构
    Mac查看进程
  • 原文地址:https://www.cnblogs.com/gczr/p/6476577.html
Copyright © 2011-2022 走看看