zoukankan      html  css  js  c++  java
  • BFS 和 DFS

    BFS and DFS

    一般来说,能用DFS解决的问题,都能用BFS。DFS容易爆栈,而BFS可以自己控制队列的长度。深度优先一般是解决连通性问题,而广度优先一般是解决最短路径问题。

    • 广优的话,占内存多,能找到最优解,必须遍历所有分枝. 广优的一个应用就是迪科斯彻单元最短路径算法.

    • 深优的话,占内存少,能找到最优解(一定条件下),但能很快找到接近解(优点),可能不必遍历所有分枝(也就是速度快), 深优的一个应用就是连连看游戏.

    • 两个算法都是O(V+E),在用到的时候适当选取。

    A Tree is typically traversed in two ways:

     

    BFS(G,s)

       for each vertex v in V[G]

           status[v] = WHITE

           /******其他初始化******/

       status[s] = GRAY //s是原点

       queue q

       入队(q,s);

       while q非空

           t = 出队(q);

           for each vertex v in Adj[t] //与t邻接的点

               if status[v] = WHITE //只对未访问的操作

                   status[v] = GRAY //标记为第一次访问

                   /******其他操作******/

                   入队(q,v)

           status[t] = BLACK   //此点已经处理完了

     

     

     

    DFS(G,s)

       for each vertex v in V(G)

           status[v] = WHITE

           /******其他初始化******/

       for each vertex v in V(G)

           if(status[v]==WHITE)

               DFS-VISIT(v)

     

    DFS-VISIT(v)

       status[v] = GRAY

       for each vertex t in Adj(v)

           if status[t] = WHITE

               DFS-VISIT(t)

               /******其他操作******/

       status[v] = BLACK

  • 相关阅读:
    QML小例子【QML工程里信号与槽】
    TensorFlow基础笔记(11) conv2D函数
    tensorflow学习笔记(10) mnist格式数据转换为TFrecords
    tensorflow函数学习笔记
    各个层次的gcc警告
    opencv3.2 dnn 图像分割
    ubuntu16.04 安装caffe以及python接口
    linux profileashrcash_profile之间的区别和联系
    ubuntu 16.04 安装pycharm
    Ubuntu下配置samba实现文件夹共享
  • 原文地址:https://www.cnblogs.com/codingforum/p/6964320.html
Copyright © 2011-2022 走看看