BFS 两个重要性质

对于进行广度优先搜索的队列中,应该始终满足两个性质:

 

性质1:若队首为第i层拓展到的节点,则队列中最多只能存在第i层和第i+1层的节点,不可能出现3层节点。

 

性质2:队列中的元素会严格按照层数单调递增,而且会按照入队的先后来判别拓展的优先程度,即先入队的一定是更优先的,而越往后越次之。

 

通过这两个性质,其实我们就可以更严格更方便更快捷更明确地设计有关BFS的程序,当已经找到一个目标节点,即可以终止程序(or过程)。

而对于单调性的优化,则可以使用单调队列、双端队列、优先队列代替普通队列,进而达到性质2的设计,不过要就具体情况分析。

原文地址:https://www.cnblogs.com/Ronald-MOK1426/p/8848716.html

时间: 2024-11-09 22:32:30

BFS 两个重要性质的相关文章

BFS(两个水杯转换水量)

题意:给出两个容积分别为 a 和 b 的pot,按照以下三种操作方式,求出能否在一定步数后,使者两个pot的其中一个的水量为c. 1.FILL(i):将ipot倒满水. 2.DROP(i):将ipot倒空水. 3.POUR(i,j): 将ipot的水倒到jpot上,直至要么ipot为空,要么jpot为满. 思路:bfs求最短路径,与1426类似,只是每个节点的子节点数为6个而已.具体参照1426. //Memory Time //232K 32MS #include<iostream> #in

HDU 2102 A计划 DFS与BFS两种写法

1.题意:一位公主被困在迷宫里,一位勇士前去营救,迷宫为两层,规模为N*M,迷宫入口为(0,0,0),公主的位置用'P'标记:迷宫内,'.'表示空地,'*'表示墙,特殊的,'#'表示时空传输机,走到这里就会被传输到另一层的相对位置:在迷宫内没走动一步耗时为1,最终求解是否能在T时刻解救到公主: 2.输入输出:第一行C表示C组数据,每一组内N,M,T给出的迷宫规模与时间,接着给出了双层迷宫的内容:若是能找到公主输出"YES",否则"NO": 3.分析:这里原题意判断是

链表加bfs求补图联通块

https://oj.neu.edu.cn/problem/1387 给一个点数N <= 100000, 边 <= 1000000的无向图,求补图的联通块数,以及每个块包含的点数 由于点数太大,补图会是稠密图,甚至建立补图都要O(n^2),只能挖掘一下联通块,bfs,补图的性质,从原图入手求补图的联通块: 在原图中不直接相邻的点,在补图中一定属于同一个联通块 每个点只属于一个联通块,所以找好一个联通块之后可以删去这个联通块的所有点,把图规模缩小 这样子:1.准备一个集合放所有未探索的点,初始化

ACM: FZU 2150 Fire Game - DFS+BFS+枝剪 或者 纯BFS+枝剪

FZU 2150 Fire Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows, M columns). At the beginning, each grid of this boar

ZOJ 3420 Double Maze (BFS)

链接 :  http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3420 普通的BFS 两个图的状态表示成一个状态.记录答案直接用string保存操作. #include <iostream> #include <sstream> #include <cstring> #include <cstdio> #include <vector> #include <stac

zoj 3478 Binary Land bfs

链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3478 Binary Land Time Limit: 2 Seconds      Memory Limit: 65536 KB Binary Land is a very simple action title for the Famicom with an interesting twist. You control, not one, but two peng

HDU 2612 Find a way bfs 难度:1

http://acm.hdu.edu.cn/showproblem.php?pid=2612 bfs两次就可将两个人到达所有kfc的时间求出,取两人时间之和最短的即可,这个有点不符合实情,题目应该出两人最大时间最小才对 #include <cstdio> #include <cstring> #include <queue> using namespace std; const int inf=0x3fffffff; char maz[300][301]; int n,

POJ 1130(一道纯水,bfs+dfs)

POJ 1130 大概题意:给出一副图,求从起点到终点 (0->ET) 必须经过的一点. 我的思路:首先DFS求出经过每点的次数,必过的一点的次数一定最高,但是就这样吗?有可能有多个必过的点,所以还要找出离ET最近的点,这里就利用BFS逐层搜索的性质求每点到ET的距离. #include<iostream> #include<cstdio> #include<string.h> #include<iomanip> #include<queue&g

ural 1145 Rope in the Labyrinth 图中 bfs求树的直径

1145. Rope in the Labyrinth Time limit: 0.5 second Memory limit: 64 MB A labyrinth with rectangular form and size m × n is divided into square cells with sides' length 1 by lines that are parallel with the labyrinth's sides. Each cell of the grid is