当前位置:   article > 正文

C语言 图的深度优先遍历_图的深度优先遍历头歌

图的深度优先遍历头歌

实验内容:

(1)实现图的邻接矩阵表示,并创建图;

(2)对邻接矩阵表示的图实现深度优先遍历

深度优先遍历的基本思想:

① 选择一个起始点出发,并访问之;

②一次从起始点的未访问过的邻接点出发,深度遍历图,直到图中与起始点有路径相通的顶点都被访问过为止;

③如此时图中尚有顶点未被访问过,则另选图中一个未访问过的顶点作起始点, 重复上述过程,直到所有顶点被访问过为止。

C语言代码如下:

  1. #include<stdio.h>
  2. #define MaxSize 100
  3. typedef struct
  4. {
  5. int n,e; //顶点数、边数
  6. int link[MaxSize][MaxSize]; //两顶点之间连接
  7. char vexs[MaxSize]; //顶点的名称
  8. }MGraph;
  9. void CreateGraph(MGraph *G)
  10. {
  11. int i,j,k;
  12. printf("请输入顶点数和边数:");
  13. scanf("%d%d",&(G->n),&(G->e));
  14. for(i=0;i<G->n;i++) //初始化邻接矩阵 ,全部置零
  15. {
  16. for(j=0;j<G->n;j++)
  17. {
  18. G->link[i][j]=0;
  19. }
  20. }
  21. printf("\n请输入每个顶点的名称:\n");
  22. fflush(stdin);
  23. for(i=0;i<G->n;i++)
  24. {
  25. scanf("%c",&G->vexs[i]);
  26. fflush(stdin); //清除缓冲区
  27. }
  28. printf("\n请输入边的信息:");
  29. for(k=0;k<G->e;k++) //输入邻接矩阵
  30. {
  31. scanf("%d,%d",&i,&j);
  32. G->link[i][j]=1;
  33. }
  34. printf("输出的邻接矩阵如下:");
  35. for(i=0;i<G->n;i++) //打印邻接矩阵
  36. {
  37. printf("\n");
  38. for(j=0;j<G->n;j++)
  39. printf("%8d",G->link[i][j]) ;
  40. }
  41. }
  42. int visited[MaxSize];
  43. void dfs(MGraph *G,int i)
  44. {
  45. int j;
  46. printf("%c",G->vexs[i]);
  47. visited[i]=1;
  48. for(j=0;j<G->n;j++)
  49. {
  50. if(G->link[i][j]==1&&visited[j]==0)
  51. {
  52. dfs(G,j);
  53. }
  54. }
  55. }
  56. void DFSTraverse(MGraph *G)
  57. {
  58. int i;
  59. for(i=0;i<G->n;i++)
  60. {
  61. visited[i]=0; //全部标记为未访问
  62. }
  63. for(i=0;i<G->n;i++)
  64. {
  65. if(visited[i]==0)
  66. {
  67. dfs(G,i);
  68. }
  69. }
  70. }
  71. int main()
  72. {
  73. MGraph G;
  74. CreateGraph(&G);
  75. printf("\n\n深度优先遍历序列:");
  76. DFSTraverse(&G);
  77. return 0;
  78. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/509642
推荐阅读
相关标签
  

闽ICP备14008679号