[noip] bfs算法整理

BFS : 

  1.普通队列:维护

     (1)两段性(队列中至多有x和x+1两种距离)

     (2)单调性

  首次入队即为最短距离(所以通常要判重)

  2.优先队列:

  可能入队出队多次,通常首次 出 队即为最短距离(无需判重)

一.模型

  1.flood fill(洪水填充,即连通块模型)

  2.最短路(通常在网格图上,线性状态数量)

    1)边权都为1 

    2)边权为0或1(使用双端队列,边权为0的放入队首,边权为1的放入队尾)

  3.最小步数模型(把某状态操作前和操作后连一条边,边权为1)

二.优化(状态数量很多,状态扩展不确定的问题):

  1.双向广搜(适用于终点明确的问题),使用两个队列,分别扩展起点和终点的状态,为保证效率,通常保持两个队列状态数量一致

  2.启发式搜索

    A*:使用优先队列,根据从起点到该状态的最短距离 + 从该状态到终点的估值距离(估值距离 <= 实际答案),扩展状态,终点首次出队即为最小距  离(注意其他状态首次出队不能保证为最短距离)

    IDA*(未学习)

猜你喜欢

转载自www.cnblogs.com/swingkite/p/11717047.html