基于邻接矩阵表示的广度优先遍历。 #include <stdio.h> #include <stdlib.h> #define MVNum 100 int visited[MVNum]; typedef struct{ char vexs[MVNum]; int arcs[MVNum][MVNum]; int vexnum,arcnum; }Graph; void CreateUDN(Graph &G);//实现细节隐藏 void BFS(Graph G, int v){ char Q[MVNum]; int f=0,r=0; int u,w; printf("%c ",G.vexs[v]); visited[v] = 1; Q[r++]=v; while( ){ u= ; for(w = 0; w < G.vexnum; w++){ if( ) { printf("%c ",G.vexs[w]); visited[w] = 1; =w; } } } } void BFSTraverse(Graph G){ int v; for(v = 0; v < G.vexnum; ++v) visited[v] = 0; for(v = 0; v < G.vexnum; ++v) if(!visited[v]) BFS(G, v); } int main(){ Graph G; CreateUDN(G); BFSTraverse(G); return 0; }
时间: 2024-01-05 14:02:06 浏览: 75
建立图的邻接矩阵或邻接表存储并在此基础上实现图的深度优先遍历和广度优先遍历.doc
5星 · 资源好评率100%
这是一个基于邻接矩阵表示的广度优先遍历的代码实现。其中,Graph结构体包含了图的顶点集和边集,visited数组表示顶点是否被访问过。CreateUDN函数用于创建无向图,BFS函数用于进行广度优先遍历,BFSTraverse函数用于遍历整个图。
具体实现细节如下:
1. 在BFS函数中,首先访问起始顶点v,并将其标记为已访问,加入队列Q中。
2. 进入while循环,当队列不为空时,取出队头元素u,并遍历u的所有邻接点w。
3. 对于每个邻接点w,如果该点未被访问过,则访问该点,并将其标记为已访问,加入队列Q中。
4. 循环结束后,所有与起始顶点v相连通的顶点都被访问过。
5. 在BFSTraverse函数中,对于每个未被访问过的顶点,调用BFS函数进行广度优先遍历。
需要注意的是,此代码仅适用于无向图。如果是有向图,需修改邻接矩阵的赋值方式。同时,还需注意图的连通性,如果图不连通,需要对每个连通分量都进行广度优先遍历。
阅读全文