关于图
广度优先搜索和深度优先搜索是根据图来搜索的算法,或者说是对图进行遍历的算法,而图是一种数据结构。如下的图:
BFS
广度优先搜索(BFS)的搜索思想是先确定图中的一个节点为起始节点,然后从这个起始点开始搜索和它相邻的每个点,然后再以这些搜索到的相邻的节点向外搜索和他们相邻的其他节点,每个搜索过的节点都要进行标记,标记过的节点就不再搜索,每个节点都有自己距离起始节点的长度,这个长度以与他相邻的上一个节点的长度+1;搜索直到所有可搜索的节点全部遍历,得到所有节点到起始节点的距离。
广度优先搜索用队列实现:
- 把起始节点插入队列;
- 每次从队列的头部取出一个元素,查看这个元素所有的下一级相邻元素,把它们放到队列的末尾。并把这个元素记为它下一级元素的前驱;
- 找到要找的元素时结束,或者队列为空即所有元素全部遍历完;
下面是一个运用广度优先搜索处理的关于迷宫的问题:
#include <iostream>
#include <queue>
#include <algorithm>
#include <string.h>
using namespace std;
bool vis[201][201];//记录访问过没有 bool取值false和true,0为false,非0为true。
int dx[4] = {
0,1,0,-1};
int dy[4] = {
1,0,-1,0};
char Map[201][201<