当前位置:   article > 正文

C语言实现邻接表的深度优先遍历_基于邻接表的深度优先遍历

基于邻接表的深度优先遍历

1. 对于图的遍历主要有两种遍历方式:深度优先遍历和广度优先遍历,对于图的遍历与树不同的是需要增加一个标记数组来对访问过的节点进行标记,假如访问过了我们就不能够再进行访问了

2. 下面是使用C语言实现深度优先遍历的过程:

①首先需要存储一个图,下面使用的是邻接表的方式来存储图(使用邻接表来存储图在我的上一篇博客有写:https://blog.csdn.net/qq_39445165/article/details/92692027

② 对图进行深度优先遍历,声明一个数组来标记顶点是否被访问过

3. 下面是具体的程序:

  1. #include<stdio.h>
  2. #include<iostream>
  3. #include<malloc.h>
  4. #define maxSize 1000
  5. int visit[maxSize];
  6. using namespace std;
  7. typedef struct ArcNode{
  8. int adjvex;
  9. struct ArcNode *nextarc;
  10. int info;
  11. }ArcNode;
  12. typedef struct{
  13. int data;
  14. ArcNode *firstarc;
  15. }Vnode;
  16. typedef struct{
  17. Vnode adjlist[maxSize];
  18. int n, e;
  19. }AGraph;
  20. AGraph *graph;
  21. void insertNode(ArcNode *node, ArcNode *newNode){
  22. ArcNode *p = node;
  23. while(p->nextarc != NULL){
  24. p = p->nextarc;
  25. }
  26. p->nextarc = newNode;
  27. }
  28. void create(){
  29. graph = (AGraph*)malloc(sizeof(AGraph));
  30. cout << "输入顶点的数目: " << endl;
  31. cin >> graph->n;
  32. cout << "输入图中边的数目: " << endl;
  33. cin >> graph->e;
  34. int u = -1, v = -1, weight = -1;
  35. for(int i = 0; i < graph->n; i++){
  36. graph->adjlist[i].firstarc = NULL;
  37. }
  38. ArcNode *node;
  39. for(int i = 0; i < graph->e; i++){
  40. cin >> u >> v >> weight;
  41. node = (ArcNode *)malloc(sizeof(ArcNode));
  42. node->adjvex = v;
  43. node->info = weight;
  44. node->nextarc = NULL;
  45. graph->adjlist[u].data = u;
  46. if(graph->adjlist[u].firstarc == NULL){
  47. graph->adjlist[u].firstarc = node;
  48. }else{
  49. insertNode(graph->adjlist[u].firstarc, node);
  50. }
  51. }
  52. }
  53. //深度优先遍历
  54. void dfs(AGraph *G, int v){
  55. ArcNode *p;
  56. visit[v] = 1;
  57. cout << v << " ";
  58. p = G->adjlist[v].firstarc;
  59. while(p != NULL){
  60. if(visit[p->adjvex] == 0){
  61. dfs(G, p->adjvex);
  62. }
  63. p = p->nextarc;
  64. }
  65. }
  66. int main(void){
  67. create();
  68. dfs(graph, 0);
  69. return 0;
  70. }

 

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

闽ICP备14008679号