bfs,即广度优先搜索,主要通过进行操作。
稍微解释一下,队列是一种基础数据结构,其形态类似于一支长长的队伍,大概如下: 在C++中,队列的头文件定义为:#include<queue>
队列的声明:queue<T1> q;
这样就定义了一个数据类型为"T1"的队列q。 成员函数及作用集合: q.empty() | 判断队列q是否为空,当队列q空时,返回true;否则为false(值为0(false)/1(true))。 |
---|---|
q.size() | 访问队列q中的元素个数。不可写成sizeof(q)或size(q) |
q.push() | 会将一个元素a置入队列q中 |
q.front() | 返回队列q内的第一个元素(也就是第一个被置入的元素)。(不可写成front(q)) |
q.pop() | 会从队列q中移除第一个元素。(不可写成pop(q)) |
队列是一种非常常见的数据结构,最常用于bfs(广度优先搜索)。
广度优先搜索可以将其想象成水滴落入水面溅起了的一圈一圈的涟漪,是由一个起始点开始一圈一圈进行扩散搜索的。(请一定要自行想象这个过程,非常重要!)
就比如这样一个伪代码:
void bfs(起始点){ 将起始点放入队列中; 标记起点访问; while (如果队列不为空) { 访问队列中队首元素x; 删除队首元素; for (x 所有相邻点) { if (该点未被访问过且合法) { 将该点加入队列末尾; } } } 队列为空,广搜结束;}今天就讲到这里,后续会持续更新。