zoukankan      html  css  js  c++  java
  • BFS

    1,为什么bfs要用到队列。

    2,对于你可以遍历到的所有状态,先把他们加到一个队列中,然后再去遍历他们。

    3,简单说就是先mark,然后在遍历。

    4,代码框架

    void bfs()
    {
        push(..)//把起始状态入队列
        while(!empty()){//当队列不为空时候
        x=pop();
        for(...)
    {}//遍历此状态可到达的状态
    push(...)//后续状态入队
        
        
        }
    
    
    }

     5,bfs有一个有用的特点,即逐层扩展

    若任意两个状态间转移的代价都相同,

    那么bfs第一次访问到目标状态时时从起始状态到目标状态的最小代价的

    (因为没有切身体会,所以感受不是很深)

    例如在网格图中求单源最短路,只需要从源点开始逐层扩展。。

    啥啥的。。以后再说把

    6,与其说染色,不如说特殊点的记忆化。

    7,呵呵,要不思考放晚上把。。

    二,BFS拓展

    1,先从定义开始,只有当状态两两之间相互转移的代价相同时,才能以第一次遍历到

    目标状态的代价作为最小代价

    (坦白说,不骗你自己,我确实不是很懂,其实但是i要是根据下01迷宫马的遍历的各种题的话,就比如马的遍历,只要能走,并没有代价,都是日字走法,但是换个角度,不就是大家走的代价一样嘛,哦哦,这样倒是有些了解了)

    2,由定义引出来,那么代价不相同呢?

    就会有两条路可以走,

     ①是使用优先队列,就是每次从队列中取出的是代价最小的那个。

    他说就是堆优化的迪杰算法。我倒不是很懂。

    ②是允许反复进队,第二次更新到该状态的话,如果代价更小的话则更新次状态并再次进队

    但是碰上“好”的数据会re,tle.

    (比如某个点让你反复进队,设计好的)

  • 相关阅读:
    使用C++为对象分配与释放内存时的几个好习惯
    OGRE渲染流程
    【问题解决记录】无法识别的标志“-sdlMode”,在“p2”中
    四元数 Quaternion
    《The Cg Tutorial》阅读笔记——凹凸贴图 Bump Mapping
    尝试优化骨骼动画计算的意外收获——使用嵌入式汇编对float转int进行优化
    Model 的 Meta 选项
    dns资料
    ansible中的变量
    DockerFile与docker-compose.yml是什么
  • 原文地址:https://www.cnblogs.com/beiyueya/p/12005607.html
Copyright © 2011-2022 走看看