当前位置:   article > 正文

数据结构:以深度优先搜索方式产生图的生成树 完整代码_有向图怎么画深度优先生成树

有向图怎么画深度优先生成树

图的深度优先搜索可以用来解决很多问题,例如可以用于产生图的生成树。程序代码在VC++6.0和Dev-C++下编译通过。

算法的输入和输出为:

  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. #define MAX_VERTEX_NUM 100
  4. typedef int AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
  5. typedef struct { // 图的定义
  6. char vexs[MAX_VERTEX_NUM];
  7. AdjMatrix arcs; // 弧的信息
  8. int vexnum, arcnum; // 顶点数,弧数
  9. } MGraph;
  10. void DFS(MGraph g, int k, int visited[])
  11. {
  12. int w;
  13. visited[k]=1;
  14. for(w=0;w<g.vexnum;w++)
  15. {
  16. if(g.arcs[k][w]==1 && visited[w]==0)
  17. {
  18. printf("边(%c--%c)\n",g.vexs[k],g.vexs[w]);
  19. DFS(g,w,visited);
  20. }
  21. }
  22. }
  23. int getIndex(char name, MGraph g)
  24. {
  25. int i;
  26. for(i=0;i<g.vexnum;i++)
  27. if(g.vexs[i]==name)
  28. return i;
  29. return -1;
  30. }
  31. int main()
  32. {
  33. int i,j,n,visited[1000];
  34. char n1,n2;
  35. MGraph g;
  36. printf("Input number of node: ");
  37. scanf("%d",&n);
  38. g.vexnum=n;
  39. for(i=0;i<n;i++)
  40. {
  41. printf("node (%d)= ",i);
  42. fflush(stdin);
  43. scanf("%c",&(g.vexs[i]));
  44. }
  45. for(i=0;i<n;i++)
  46. for(j=0;j<n;j++)
  47. g.arcs[i][j]=0;
  48. for(;;)
  49. {
  50. printf("Insert edge i-j: ");
  51. fflush(stdin);
  52. scanf("%c%c",&n1,&n2);
  53. i=getIndex(n1,g);
  54. j=getIndex(n2,g);
  55. if(i==-1 && j==-1)
  56. break;
  57. g.arcs[i][j]=1;
  58. g.arcs[j][i]=1;
  59. }
  60. for(i=0;i<n;i++)
  61. visited[i]=0;
  62. printf("深度优先搜索产生的生成树如下:\n");
  63. for(i=0;i<n;i++)
  64. if(visited[i]==0)
  65. DFS(g, i, visited);
  66. printf("\n");
  67. return 0;
  68. }

 

 

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号