BFS中的多源BFS-双端队列BFS

BFS找到的答案为什么一定是最小的?
证明:
BFS队列具有两段性:队列中同时存的所有点到起点的距离差值最多是1。
BFS队列具有单调性:分成两段性,前面一定是小的。
数学归纳法证明:
1.初始的时候距离为0成立
2.假设队首的某个点距离起点为x,把它能扩展的点加到队尾,距离为x+1,仍然满足两段性和单调性。
因此队列中的所有元素都满足上面的两个性质
例题1:矩阵距离
这个题思路就是首先将起点加入到队列,然后正常的bfs就行
例题2:魔板
这个题需要用到unordered_map来存储状态。类似于走迷宫。要写最短字典序,则需要按照ABC这样的操作来扩展。这一大类问题属于最小步数模型
例题3:电路维修
这个题是经典的双端队列模型,边权只包含0和1,那么如果从某一个点扩展出来的点的边权是0,就插入对头,否则插入队尾。这个题需要注意偶数点只能走到偶数点,奇数点只能走到奇数点。如果目标点是奇数点,则一定无解。

你可能感兴趣的:(搜索,宽度优先,图论,算法)