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,标记该节点已被访问

  • 相关阅读:
    ALV 填值返回更新屏幕
    alv 的几种形式 和 函数
    JS 截取字符串的空格
    codeigniter 轻量级架构知识初习
    之前的博客挂掉了
    在服务器上运行php文件来执行操作
    浏览器判断
    php 汉字判断
    web 套打方法实现打印机功能
    WIN8
  • 原文地址:https://www.cnblogs.com/gczr/p/6476577.html
Copyright © 2011-2022 走看看