当前位置:   article > 正文

图的深度优先搜索/广度优先搜索(邻接表实现)

以下算法是图的深度优先搜索在邻接表上实现的
  1. //深度优先遍历图返回连通分量数-
  2. int dfstraverse(LinkedGraph q)
  3. {
  4. int i,count=0;
  5. for(i=0;i<q.n;i++)
  6. visitnode[i]=0;
  7. for(i=0;i<q.n;i++)
  8. if(!visitnode[i])
  9. {
  10. printf("#DFS->CASE[%d]:\n",count);
  11. count++;
  12. dfs(q,i);
  13. }
  14. return count;
  15. }
  16. void DFS(LinkedGraph q)
  17. {
  18. int i,j;
  19. for(i=0;i<q.n;i++)
  20. {
  21. for(j=0;j<q.n;j++)
  22. visitnode[j]=0;
  23. printf("\n");
  24. dfs(q,i);
  25. }
  26. }
  27. void bfs(LinkedGraph g,int i)
  28. {
  29. int j;
  30. EdgeNode *p;
  31. int queue[M],front=0,rear=0;
  32. printf("%c\n",g.adjlist[i].vartex);
  33. visitnode[i]=1;
  34. queue[rear++]=i;//输出被访问节点,并将其入队
  35. while(front<rear)//当队不空
  36. {
  37. j=queue[front++];//出队
  38. p=g.adjlist[j].FirstEdge;//定为到该节点的第一条边
  39. while(p)
  40. {
  41. if(visitnode[p->adjvex]==0)//如果该条边的顶点未访问
  42. {
  43. printf("%c\n",g.adjlist[p->adjvex].vartex);//输出该边的顶点
  44. queue[rear++]=p->adjvex;//把这条边的顶点入队
  45. visitnode[p->adjvex]=1;//标记访问过该顶点
  46. }
  47. p=p->next;//访问下一条边
  48. }
  49. }
  50. }
  51. //广度优先遍历图返回连通分量数
  52. int bfstraverse(LinkedGraph g)
  53. {
  54. int i,count=0;
  55. for(i=0;i<g.n;i++)
  56. visitnode[i]=0;
  57. for(i=0;i<g.n;i++)
  58. if(!visitnode[i])
  59. {
  60. printf("#BFS->CASE[%d]:\n",count);
  61. count++;
  62. bfs(g,i);
  63. }
  64. return count;
  65. }

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/Thereisnospon/p/4768505.html

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

闽ICP备14008679号