从图中某一顶点出发,按照某种搜索方法沿着图中的边对图中的 |
·首先访问起始顶点v;
·接着由出发依次访问v的各个未被访问过的邻接顶点Wi,W2....Wi;
·然后依次访问w,,w2.. w,的所有未被访问过的邻接顶点;
·在从这些访问过的顶点出发,访问它们所有未被访问过的邻接顶点;
....,以此类推;
开始访问第一个结点1, visit[0] = 1,结点1入队 |
bool visited[MAX_TREE_SIZE];
void BFSTraverse(Graph G){
for(int i=0 ;i<G.vexnum;++i)
visited[i]=FALSE;
InitQueue (Q):
for(int i;i<G.vexnum;++i)
if(!visited[i])
BES(G, i);
}
void BES(Graph G, int v){
visit(v);
visited[v]=TRUE;
EnQueue (Q, v);
while(!isEmpty (Q)){
DeQueue(Q, v);
for(w=FirstNeighbor(G, v);W>=0 ;w=NextNeighbor(G,v,w))
if(!visited[w]){
## 标题visit[w];
visited[w]=TRUE;
EnQueue (Q, w);
}
}
}
无权图单源最短路径问题
定义从顶点u到顶点v的最短路径d(u,v)为从u到v的任何路径中最少的边数; |
void BES_MIN_Distance (Graph G, int u){
for(int i=0 ; i<G.vexnum; ++i)
d[i]=MAX;
visited[u]=TRUE;
d[u] = 0;
EnQueue (Q, u);
while(!isEmpty(Q) {
DeQueue(Q, u);
for(w=FirstNeighbor(G,u); W>=0; w=NextNeighbor(G,u,w))
if(!visit[w]){
visited[w]=TRUE;
d[w]= d[u]+1;
EnQueue(Q, w);
)
在广度遍历过程中,我们可以得到一棵遍历树,称为广度优先生成树(生成森林)。
*邻接矩阵法的广度优先生成树唯一,邻接表法的不唯一* |
·