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.

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

  • 相关阅读:
    [Python] 项目的配置覆盖与合并
    [PHP] dompdf 使用记录
    Ubuntu16.04 desktop 设置共享文件夹 -- 图形界面配置
    (转)你不得不看的六篇知识图谱落地好文
    转 python2 与 python3 的编码
    (转) C#使用ODP.NET(Oracle.ManagedDataAccess.dll)操作Oracle数据库
    django & celery
    (转) 解决django项目部署到nginx+uwsgi服务器后 admin页面样式消失的问题
    Ubuntu 16.04 安装 SVN-Client (RaabitVCS)
    python 2.7
  • 原文地址:https://www.cnblogs.com/beiyueya/p/12005607.html
Copyright © 2011-2022 走看看