当前位置:   article > 正文

c语言数据结构---无向图邻接表---bfs_bfs算法 c语言 邻接表

bfs算法 c语言 邻接表
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<iostream>
  4. #include<queue>
  5. using namespace std;
  6. #define MAX 100
  7. typedef struct Anode{//子 无向图
  8. int adjvex;//所指点索引
  9. struct Anode *next;
  10. }Anode;
  11. typedef struct Vnode{//顶点
  12. char data;//顶点信息
  13. Anode *firsta;//第一个子
  14. }Vnode,Adjlist[MAX];
  15. typedef struct{
  16. Adjlist ver;//一个数组
  17. int vexnum,arcnum;//顶点个数/边个数
  18. }Algraph;
  19. int find(Algraph G,int u){
  20. for(int i=1;i<=G.vexnum;i++){
  21. if(u==G.ver[i].data)return i;
  22. }
  23. return -1;
  24. }
  25. void creat(Algraph &G){
  26. cout<<"input vexnum and arcnum:";
  27. cin>>G.vexnum>>G.arcnum;
  28. cout<<"input every node"<<endl;
  29. for(int i=1;i<=G.vexnum;i++){
  30. cin>>G.ver[i].data;
  31. G.ver[i].firsta=NULL;
  32. }
  33. getchar();
  34. cout<<"start end "<<endl;
  35. for(int i=1;i<=G.arcnum;i++){
  36. char aa,bb;
  37. cin>>aa>>bb;
  38. getchar();
  39. int a=find(G,aa);
  40. int b=find(G,bb);
  41. Anode *p1=new Anode;//新建首点
  42. p1->adjvex=b;
  43. p1->next=G.ver[a].firsta;
  44. G.ver[a].firsta=p1;//头插法
  45. Anode *p2=new Anode;//新建首点
  46. p2->adjvex=a;
  47. p2->next=G.ver[b].firsta;
  48. G.ver[b].firsta=p2;//头插法
  49. }
  50. }
  51. void print(Algraph &G){
  52. Anode *p;
  53. for(int i=1;i<=G.vexnum;i++){
  54. cout<<G.ver[i].data;
  55. for(p=G.ver[i].firsta;p!=NULL;p=p->next){
  56. cout<<"-> "<<p->adjvex;
  57. }
  58. cout<<endl;
  59. }
  60. }
  61. bool visit[MAX];
  62. void bfs(Algraph G){
  63. for(int i=1;i<=G.vexnum;i++)visit[i]=0;
  64. queue<int>q;
  65. for(int i=1;i<=G.vexnum;i++){
  66. if(!visit[i]){
  67. visit[i]=1;
  68. cout<<G.ver[i].data;
  69. q.push(i);
  70. while(!q.empty()){
  71. int u=q.front();
  72. q.pop();
  73. for(Anode * edge=G.ver[u].firsta;edge!=NULL;edge=edge->next){
  74. if(!visit[edge->adjvex]){
  75. cout<<G.ver[edge->adjvex].data;
  76. visit[edge->adjvex]=1;
  77. q.push(edge->adjvex);
  78. }
  79. }
  80. }
  81. }
  82. }cout<<endl;
  83. }
  84. int main(){
  85. Algraph G;
  86. creat(G);
  87. print(G);
  88. cout<<"bfs"<<endl;
  89. bfs(G);
  90. }

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

闽ICP备14008679号