BFS 搜索
广度优先搜索是一个分层的搜索过程,没有回退过程,是非递归的
BFS算法思想是:对一个无向连通图,在访问图中的某一顶点v后,由 v 出发,依次访问v的所有未访问过的邻接顶点w1,w2,w3.....wt;然后在顺序访问w1,w2,w3.....wt的所有还未访问过的顶点;在从这些顶点出发,在访问他们的所有还未访问过的邻接顶点,.........,如此直到图中的所有顶点都被访问为止;
如果用邻接矩阵存储图(设顶点个数为 n ),则 BFS 算法的伪代码如下:
void BFS(顶点 i) { //从顶点i进行广度优先搜索
visited[ i ] = 1; //将顶点 i 的访问标志置为 1
将顶点 i 入队列
while( 队列不为空 )
{
取出队列头得顶点,设为 k
for(int j=0;j<n;j++) //对其他所有顶点
{
//j 是 k的邻接顶点,且顶点 j 没有访问过
if(Enge[k][j]==1&& !visited[j])
{
将顶点 j 的访问标志置 1
将顶点j入队列
}
}
}
}
如果问题有解,则采用广度优先搜索必能找到解,且找到的解的步数是最小的,解是最优的;
例子如下 点击这里