1,为什么bfs要用到队列。
2,对于你可以遍历到的所有状态,先把他们加到一个队列中,然后再去遍历他们。
3,简单说就是先mark,然后在遍历。
4,代码框架
void bfs() { push(..)//把起始状态入队列 while(!empty()){//当队列不为空时候 x=pop(); for(...) {}//遍历此状态可到达的状态 push(...)//后续状态入队 } }
5,bfs有一个有用的特点,即逐层扩展
若任意两个状态间转移的代价都相同,
那么bfs第一次访问到目标状态时时从起始状态到目标状态的最小代价的
。
(因为没有切身体会,所以感受不是很深)
例如在网格图中求单源最短路,只需要从源点开始逐层扩展。。
啥啥的。。以后再说把
6,与其说染色,不如说特殊点的记忆化。
7,呵呵,要不思考放晚上把。。
原文:https://www.cnblogs.com/beiyueya/p/12005607.html