上一章详细的写出了深度优先遍历的四种情况的程序:
http://blog.csdn.net/zscfa/article/details/75947816
这一次来详细说说广度优先遍历:
广度优先搜索类似于二叉树的层序遍历,它的基本思想就是:首先访问起始顶点v,接着由v出发,依次访问v的各个未访问过的邻接顶点w1,w2,…,wi,然后再依次访问w1,w2,…,wi的所有未被访问过的邻接顶点;再从这些访问过的顶点出发,再访问它们所有未被访问过的邻接顶点……依次类推,直到图中所有顶点都被访问过为止。
二、BFS算法的实现
与树相比,图的不同之处在于它存在回路/环,因此在遍历时一个顶点可能被访问多次。为了防止这种情况出现,我们使用一个访问标记数组visited[]来标记顶点是否已经被访问过。
在广度优先搜索一个图之前,我们首先要构造一个图,图的存储方式主要有两种:邻接矩阵、邻接表。
与上次一样,我们来分类说明
(一)、队列的方式实现
1、邻接矩阵
#include<iostream>
#include<stdlib.h>
#include<queue>
#define MAX 100
using namespace std;
int visited[MAX];//用来记录顶点是否被标志
typedef struct
{
char ves[MAX];//图的顶点信息
int vester;//顶点的数目
int edge;//边的数目
int e[MAX][MAX];//图的边的信息
}MGraph;
void creatMGraph(MGraph *G)
{
cout<<