C++基本算法讲解之广度优先搜索(BFS)
今天来讲算法了。
今天要用到基本队列,不知道的去看看我的上一次博文C++3.4数据结构之队列基础+blah数集题解 。
广度优先搜索(BFS)是从初始节点开始,根据搜索规则生成第一层节点,同时检查目标节点是否在这些生成的节点中。
如果没有,就要根据搜索规则向下逐一扩展,同时检查目标节点是否在这些生成的节点中。
·········
如果有,就停止搜索,
或者,如果扩展完所有节点,还没有找到目标节点,则问题无解。
看了这么一大段文字,你是不是蒙了?
简单给你讲:1.就像声波,一层一层往外扩散。直到目标节点。
2.广度优先搜索只要找到节点,就停止。因为它不像深度优先搜索,还要一条一条地比较。只要按照条件到达,层数就是最短路径。
3.可能还有如果扩展完所有节点,还没有找到目标节点的问题,所以为了减少数组越界的可能,我们可以设置数组q[m*n+2][3]。来进行搜索。q[][0]是一个节点的x坐标,q[][1]是一个节点的y坐标,q[~~][2]是到这个节点的步数,
4.地图必须有!!!
#include<bits/stdc++.h>
using namespace std;
//m=5,n=5;
const int MAXN=5*5+2;
int q[MAXN][3];
int map[5][5];
不是说过要用队列吗!
用队列的目的是一个不差扩展完所有节点。
继续完整程序:
#include<bits/stdc++.h>
using namespace std;
const