图的邻接矩阵结构上实现图的广度优先遍历

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;kvNum;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;ivNum;i++){

37. visited[i] = 0;

38. }

39.//广度优先搜索

40.for(i=0;ivNum;i++){

41.if(visited[i]==0){//假如i点没有被访问过

42. bfs(g,i);//对以邻接矩阵表示的图,以序号为i的顶点为出发点进行广度优先

搜索

43. }

44. }

45.

46.}

相关文档
最新文档