找回密码
 立即注册!
搜索

小喇叭+ 发布

系统消息:尊敬的用户,动象论坛的邮件系统已经完美修复,您现在可以顺利使用自助注册和找回密码功能了。万分感谢你对动象论坛的喜爱与支持~
06-10 15:28
系统消息:很抱歉的通知您,当前论坛的邮件系统暂时出现故障,因此自助注册和找回密码的功能将无法使用。如有任何需要,您可以直接添加客服QQ:230273459进行人工操作。对此给您带来的不便,我们深感歉意。
06-10 09:11
admin动象论坛祝大家端午快乐~悠悠粽草,人间芳华,年年岁岁皆如愿,岁岁年年长安康。
06-10 09:09
系统消息:动象论坛祝大家高考加油~
06-09 15:13
系统消息:各位坛友,由于“两会”封网原因,动象论坛服务中止了约一个星期,对于由此给您造成的麻烦我们感到万分抱歉。
03-18 23:04
admin动象论坛在这里祝大家2024龙年新年快乐~
02-09 14:58
系统消息:论坛端口问题已经解决~您可以直接访问论坛域名mcmc.ltd(www.mcmc.ltd)啦~(Tips:如访问时提示“连接被重置”报错,请清空您的DNS缓存与浏览器缓存。)
02-05 19:14
系统消息:论坛预计今天晚间将端口问题修复完成,请留意论坛动态,感谢您对动象论坛的支持~
02-05 14:06
系统消息:动象论坛目前正在紧急迁移服务器,目前请您先访问https://mcmc.ltd:150。论坛正在全力找CDN以修复端口问题,由此给您造成影响亿常抱歉。。
02-05 11:23
系统消息:动象论坛祝大家2024年新年快乐吖~祝大家前路浩浩荡荡,万事皆可期待~
12-31 22:41
系统消息:动象论坛拟于7月20日至7月21日进行服务器迁移和域名更换,届时论坛服务将暂时不可用。对此给您带来的麻烦,我们感到十分抱歉。
07-18 19:51
Mozillahello world
07-04 17:39
系统消息:高考倒计时2天!动象论坛祝大家2023高考完胜!加油!!!!!!
06-04 23:44
神秘人:
03-21 07:20
系统消息:向各位论坛坛友公开一下,我们现在吸收了@luoying2334 为论坛管理团队成员,管理讨论区、软件分享区和得闲饮茶区。如您有任何质疑,请您在【意见与建议】版块发帖,感谢您的支持~
03-20 23:23
admin论坛没啥人气啊emmm,欢迎大家来推荐退荐~
03-12 22:34
02-05 11:11
luoying2334给我学狗叫啊,三回啊三回
02-05 11:11
Civilmafia追尾黑色高级车
02-04 14:27
Civilmafia仙家军
02-03 19:08
查看: 1835|回复: 0

广度优先搜索

[复制链接]

11

主题

57

回帖

585

积分

清正廉明~版主

风纪委员

积分
585

最佳新人活跃会员

发表于 2020-7-18 11:37:54 | 显示全部楼层 |阅读模式 IP:浙江嘉兴
算法过程:
1.将根节点放入队列中
2.从队列中取出第一个元素,将队列中的第一个元素弹出
3.将所取得元素的全部节点加入队列中
4.判断队列是否为空
     a. 若是,则结束
     b.若不是,则跳到第二步
  1. #include <iostream>
  2. using namespace std;

  3. const int verMax=9;
  4. const int queMax=10; // >=9皆可

  5. struct node//声明图形顶点结构
  6. {
  7. int vertex;
  8. struct node *next;
  9. };

  10. typedef struct node *graph;
  11. struct node head[verMax];//声明顶点结构数组
  12. int que[queMax];
  13. int front=-1;
  14. int rear=-1;
  15. int visit[verMax];//查找记录//队列的存入

  16. int enque(int v)
  17. {
  18.     if(rear>=queMax)//队列已满
  19.     return -1;
  20. else
  21. {
  22.     rear++;//对了尾端指针后移
  23.     que[rear]=v;//将值存入队列中
  24.     return 1;
  25.     }
  26. }
  27. //队列的取出
  28. int deque()
  29. {
  30.     if(front==rear)//队列已空
  31.         return -1;
  32.     else
  33.     {
  34.         front++;
  35.         return que[front];
  36.     }
  37. }
  38. //广度优先搜索法
  39. void BFS(int v)
  40. {
  41.     graph point;
  42.     enque(v);//存入队列
  43.     visit[v]=1;//已查找
  44.     cout<<"["<<v<<"]==>";
  45.     while(front!=rear)
  46.     {
  47.         v=deque();
  48.         point=head[v].next;
  49.         while(point!=NULL)//读入邻接列表所有顶点
  50.         {
  51.             if(visit[point->vertex]==0)
  52.             {
  53.                 enque(point->vertex);//存入队列
  54.                 visit[point->vertex]=1;//已查找过的顶点
  55.                 cout<<"["<<point->vertex<<"]==>";
  56.             }
  57.             point=point->next;
  58.         }
  59.     }
  60. }
  61. //建立邻接顶点至邻接列表内
  62. void create_graph(int v1,int v2)
  63. {
  64.     graph point,New;
  65.     New=(graph)malloc(sizeof(struct node));
  66.     if(New!=NULL)
  67.     {
  68.         New->vertex=v2;//邻近顶点
  69.         New->next=NULL;
  70.         point=&(head[v1]);
  71.         while(point->next!=NULL)
  72.             point=point->next;
  73.         point->next=New;//串连在列表尾端
  74.     }
  75. }
  76. //输出邻接列表内数据
  77. void print_graph(struct node *head)
  78. {
  79.     graph point;
  80.     point=head->next;//设置point为首节点
  81.     while(point!=NULL)
  82.     {
  83.         cout<<"["<<point->vertex<<"] ";
  84.         point=point->next;
  85.     }
  86.     cout<<endl;
  87. }
  88. //主程序
  89. void main()
  90. {
  91.     int node[20][2]={
  92.     {1,2},{2,1},{1,3},{3,1},{2,4},{4,2},{2,5},{5,2},{3,6},{6,3},
  93.     {3,7},{7,3},{4,8},{8,4},{5,8},{8,5},{6,8},{8,6},{7,8},{8,7}};
  94.     int i;
  95.     for(i=0;i<verMax;i++)
  96.     {
  97.         head[i].vertex=i;
  98.         head[i].next=NULL;
  99.     }
  100.     for(i=0;i<verMax;i++)
  101.         visit[i]=0;

  102.     for(i=0;i<20;i++)
  103.         create_graph(node[i][0],node[i][1]);

  104.     cout<<"======Graph======"<<endl;
  105.     for(i=1;i<verMax;i++)
  106.     {
  107.         cout<<"Vertex["<<i<<"]: ";
  108.         print_graph(&head[i]);
  109.     }
  110.     //广度优先搜索
  111.     cout<<"Bradth-First-Search:"<<endl<<"&BEGIN==>";
  112.     BFS(4);
  113.     cout<<"END&"<<endl;
  114. }
复制代码



本帖被以下淘专辑推荐:


tel:181 5707 6602
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册!

本版积分规则

QQ|手机版|小黑屋|网站地图|动象论坛

GMT+8, 2024-11-21 16:59 , Processed in 0.210698 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表