图的邻接矩阵结构上实现图的广度优先遍历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图的邻接矩阵结构上实现图的广度优先遍历:
广搜的实现相对而言比较难,它需要用到数据结构中另一个抽象:队列
[c-sharp]view plaincopy
1.void bfs(graph *g,int i){
2.int j,k;
3. printf("%d点被访问/n",i);//i已经被访问
4. visited[i] = 1;//标记i边已经被访问
5. cirqueue *p = (cirqueue*)malloc(sizeof(cirqueue));//申请一个对队列
6. p->front = p->rear = p->count = 0;//表示队列为空
7.//以下三行代码使得i进入队列
8. p->q[p->rear] = i;
9. p->rear = (p->rear++)/maxnum;
10. p->count++;
11.
12.while(p->count!=0){//假如队列不空
13.//以下三行代码是去队列元素
14. j = p->q[p->front];
15. p->front = (p->rear++)/maxnum;
16. p->count--;
17.//寻找序号为i顶点的邻接点,并做如下处理
18.for(k=0;k
19.if(g->e[j][k]!=0&&visited[k]==0){//假如j点与i点相连,并且j点还没
有被访问过
20. printf("%d点被访问/n",k);//i已经被访问
21. visited[k] = 1;//标记i边已经被访问
22.
23.//以下三行代码使得k进入队列
24. p->q[p->rear] = k;
25. p->rear = (p->rear++)/maxnum;
26. p->count++;
27. }
28. }
29. }
30.}
31.
32.
33.void BFS(graph *g){
34.int i;
35.//首先把所有点都设置成没有访问过
36.for(i=0;i
37. visited[i] = 0;
38. }
39.//广度优先搜索
40.for(i=0;i
41.if(visited[i]==0){//假如i点没有被访问过
42. bfs(g,i);//对以邻接矩阵表示的图,以序号为i的顶点为出发点进行广度优先
搜索
43. }
44. }
45.
46.}