AdjMGraphTraverse.h
上传用户:hbxtsdjs
上传日期:2022-04-11
资源大小:1594k
文件大小:2k
源码类别:

电子书籍

开发平台:

C/C++

  1. #include "SeqCQueue.h" /*包括顺序循环队列*/
  2. void DepthFSearch(AdjMWGraph G, int v, int visited[])
  3. /*连通图G以v为初始顶点的深度优先遍历*/
  4. /*数组visited标记了相应顶点是否已访问过,0表示未访问,1表示已访问*/
  5. {
  6. int w;
  7. printf("%c   ", G.Vertices.list[v]); /*输出顶点字母*/
  8. visited[v] = 1;
  9. w = GetFirstVex(G, v);
  10. while(w != -1)
  11. {
  12. if(! visited[w]) DepthFSearch(G, w, visited);
  13. w = GetNextVex(G, v, w);
  14. }
  15. }
  16. void DepthFirstSearch(AdjMWGraph G)
  17. /*非连通图G的深度优先遍历*/
  18. {
  19. int i;
  20. int *visited = (int *)malloc(sizeof(int)*G.Vertices.size);
  21. for(i = 0; i < G.Vertices.size; i++)
  22. visited[i] = 0;
  23. for(i = 0; i < G.Vertices.size; i++)
  24. if(! visited[i]) DepthFSearch(G, i, visited);
  25. free(visited);
  26. }
  27. void BroadFSearch(AdjMWGraph G, int v, int visited[])
  28. /*连通图G以v为初始顶点的广度优先遍历*/
  29. /*数组visited标记了相应顶点是否已访问过,0表示未访问,1表示已访问*/
  30. {
  31. DataType u, w;
  32. SeqCQueue queue;
  33. printf("%c   ", G.Vertices.list[v]); /*输出顶点字母*/
  34. visited[v] = 1;
  35. QueueInitiate(&queue);
  36. QueueAppend(&queue, v);
  37. while(QueueNotEmpty(queue))
  38. {
  39. QueueDelete(&queue, &u);
  40. w = GetFirstVex(G, u);
  41. while(w != -1)
  42. {
  43. if(!visited[w])
  44. {
  45. printf("%c   ", G.Vertices.list[w]); /*输出顶点字母*/
  46. visited[w] = 1;
  47. QueueAppend(&queue, w);
  48. }
  49. w = GetNextVex(G, u, w);
  50. }
  51. }
  52. }
  53. void BroadFirstSearch(AdjMWGraph G)
  54. /*非连通图G的广度优先遍历*/
  55. {
  56. int i;
  57. int *visited = (int *)malloc(sizeof(int)*G.Vertices.size);
  58. for(i = 0; i < G.Vertices.size; i++)
  59. visited[i] = 0;
  60. for(i = 0; i < G.Vertices.size; i++)
  61. if(!visited[i]) BroadFSearch(G, i, visited);
  62. free(visited);
  63. }