找回密码
 立即注册!
搜索

小喇叭+ 发布

12-31 23:03
系统消息:尊敬的用户,动象论坛的邮件系统已经完美修复,您现在可以顺利使用自助注册和找回密码功能了。万分感谢你对动象论坛的喜爱与支持~
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
查看: 1863|回复: 0

广度优先搜索

[复制链接]

11

主题

57

回帖

585

积分

清正廉明~版主

风纪委员

积分
585

最佳新人活跃会员

发表于 2020-7-18 11:37:54 | 显示全部楼层 |阅读模式 IP:浙江嘉兴
算法过程:
1.将根节点放入队列中
2.从队列中取出第一个元素,将队列中的第一个元素弹出
3.将所取得元素的全部节点加入队列中
4.判断队列是否为空
     a. 若是,则结束
     b.若不是,则跳到第二步
  1. #include <iostream>+ i( z& `0 K# O' \0 u  k
  2. using namespace std;
      x) F7 i' v6 {) U4 f7 x1 x4 Z' Y% M

  3. - r7 d- @- H) M1 q* o
  4. const int verMax=9;5 C! T5 [( v( K% A, A) p& _( k
  5. const int queMax=10; // >=9皆可
    1 s7 F/ @/ v$ e( }
  6.   v, L2 H* H, E1 |4 m) z! c
  7. struct node//声明图形顶点结构& A) k# U) u* H# r8 b) l7 t
  8. {
    ' t3 B/ l" h: i: u: q
  9. int vertex;& ^7 l1 }3 u; {$ }, g3 H
  10. struct node *next;
    5 M3 ?% c# i- [. o' e
  11. };
    " E  z# o, ^/ j, _

  12. 2 h) K6 k& ~: Z3 t
  13. typedef struct node *graph;+ K( e# b- P4 F6 ?  c# u
  14. struct node head[verMax];//声明顶点结构数组
      V! A/ d' n3 t
  15. int que[queMax];2 T# W% e) L& t9 F
  16. int front=-1;% t. b/ v" _  f  |
  17. int rear=-1;
    5 D$ _6 C( h9 V( A/ Z( @
  18. int visit[verMax];//查找记录//队列的存入& q1 _& E3 Y" v, L3 s* G/ j

  19. 4 u# `$ w) L2 T9 ]7 Q; X3 K
  20. int enque(int v), S8 f! @, s7 C- a0 X- u# z
  21. {
    3 M5 l) j" ^- x5 @: p0 \) R
  22.     if(rear>=queMax)//队列已满+ X2 a# Y; }$ n6 i& D7 ^% e: @2 V
  23.     return -1;
    ' Z6 b; k0 r: l7 f: V% U  w2 C" B
  24. else
    1 j+ Q. c1 C0 t. i1 {2 x
  25. {
    - q: n3 k6 ^/ `' ~+ [6 Y
  26.     rear++;//对了尾端指针后移
    7 x) ^# V  R. d( J0 @
  27.     que[rear]=v;//将值存入队列中
    , Q  Y# ~5 Z2 C% V! d" a( l
  28.     return 1;
    9 N8 M9 K- m5 \
  29.     }
    # c$ w* Z% l; j5 R" Q  D
  30. }
    9 R. ^; Q: D+ S# }' ?/ F
  31. //队列的取出- W) C6 Q' _9 v+ s# X
  32. int deque()
    5 d' o/ f; v0 }3 p. t5 {
  33. {( G( E* f) T  ]$ W3 i8 g( E
  34.     if(front==rear)//队列已空' q3 S) b, G6 p2 k* D  u) s
  35.         return -1;' F; T" _5 F, _$ k' ]' T
  36.     else
    7 L0 r; [" O5 X1 u$ n: k
  37.     {& ]. ^* L% t% b3 n, B2 z) m
  38.         front++;
    : @) {0 K( b0 D4 k
  39.         return que[front];
    / R; J/ d8 d2 L* i
  40.     }
    + [2 d/ \' X! @
  41. }
    1 o4 N  h5 p( |- u
  42. //广度优先搜索法2 V1 Z" K6 R2 m, A6 U0 W+ w
  43. void BFS(int v)7 g  f: L, o5 ?- F/ R
  44. {) A& t6 k$ J5 x' o+ Z  _
  45.     graph point;
    7 f  i/ L8 l' p6 i! ?- F$ A5 p
  46.     enque(v);//存入队列
    9 S+ [: w+ S& \* C) ~' F
  47.     visit[v]=1;//已查找( j% Z0 t9 r, ^! @6 N
  48.     cout<<"["<<v<<"]==>";
    ; l' P7 e$ d+ s5 d4 f5 H* r
  49.     while(front!=rear)
    5 }4 j) x0 G$ }' z  F
  50.     {& ~) f% L8 D- R$ Z2 p8 O
  51.         v=deque();
    / ?$ J% f$ _/ T
  52.         point=head[v].next;
    " B5 m& F5 h$ S; }/ n6 G
  53.         while(point!=NULL)//读入邻接列表所有顶点/ d( m) y9 d1 o5 f3 i8 D
  54.         {# M% b/ |% f! M# {
  55.             if(visit[point->vertex]==0)
    1 ^! |- U4 b. X% o2 [2 m; Q8 c
  56.             {
    & r- V. ~- e, g
  57.                 enque(point->vertex);//存入队列
    % F% ^" D8 S! V4 Y, v- e
  58.                 visit[point->vertex]=1;//已查找过的顶点4 @0 W- K' |0 x7 a7 m+ L/ w
  59.                 cout<<"["<<point->vertex<<"]==>";
    / Q" m( f9 H* [
  60.             }8 n# v+ U$ L9 b6 Z
  61.             point=point->next;
    / U5 A$ v) v5 F; v1 {4 y) j5 I
  62.         }
    ! t' {  d4 T# ~' u9 F
  63.     }& [1 ~4 ^# x8 X+ _. u/ k! t+ W
  64. }
    * P, s" {$ V+ ?" H
  65. //建立邻接顶点至邻接列表内# B$ W7 u' _3 q6 b
  66. void create_graph(int v1,int v2)
    & x; [+ D5 d" t5 A! P4 K
  67. {- r( [5 }4 P  \$ D! x4 o& Y3 m
  68.     graph point,New;
    + V% d. ]* U/ A* c7 Q
  69.     New=(graph)malloc(sizeof(struct node));" A& A# r5 ~2 f4 f, r
  70.     if(New!=NULL)
    3 V. K5 T* f8 G# t9 s+ K0 o
  71.     {
    2 R) ~8 j0 q  D& L
  72.         New->vertex=v2;//邻近顶点
    ) Q; Y/ K- z8 J; [/ _( J% g+ r
  73.         New->next=NULL;
    , T% H! H3 x1 ?: P# p
  74.         point=&(head[v1]);' e/ r3 [3 }* ]
  75.         while(point->next!=NULL)% v; U% A) c1 g8 K% u& }
  76.             point=point->next;4 S$ g$ W1 |5 B
  77.         point->next=New;//串连在列表尾端
    - F5 Q3 ^& s7 F1 m/ V  [
  78.     }2 I  Z: o; F) A; S. r- H
  79. }
    4 \; t: b# a) W  q
  80. //输出邻接列表内数据
    0 f; b2 R, H, Q  u+ h  B0 y7 ^! d+ n9 I6 O
  81. void print_graph(struct node *head)
    # q' K- K  ]1 i/ j3 t9 k3 ?
  82. {
    0 C" Z" c" c/ [" j2 i, T( a  S& M
  83.     graph point;  E1 _! a% m% v6 P. _
  84.     point=head->next;//设置point为首节点
      N! D$ l7 f" c% R! c" `
  85.     while(point!=NULL)
    ' T5 C' f+ V4 ?' L- v7 j  f2 o0 i- i7 i
  86.     {) g" k9 B/ N6 R9 m& v7 `. ~" l
  87.         cout<<"["<<point->vertex<<"] ";6 l  S0 l5 `4 k+ C# r& j
  88.         point=point->next;. X: G" X' @* Z; b
  89.     }2 V% N( B: z' p5 N8 ^
  90.     cout<<endl;
    - b! V% S/ C( B
  91. }0 _7 D: W; T0 h% N, q! W" [
  92. //主程序
    + ^2 o' r7 v* n: Y+ Q
  93. void main()' ?) K, W- M3 z$ W8 j; Z/ F
  94. {
    # q1 @5 M' {8 P8 y5 S) @" ?
  95.     int node[20][2]={+ [4 r3 D+ z7 }9 m, s5 K" q
  96.     {1,2},{2,1},{1,3},{3,1},{2,4},{4,2},{2,5},{5,2},{3,6},{6,3},- }- e; f3 G* P6 F, u/ E; z1 ]
  97.     {3,7},{7,3},{4,8},{8,4},{5,8},{8,5},{6,8},{8,6},{7,8},{8,7}};- {: z" e& J/ w' S. q: y
  98.     int i;
    6 _6 `. C- v' \" g# H3 [* r
  99.     for(i=0;i<verMax;i++)4 `7 k1 D1 d* G! R: c' D" P6 `
  100.     {+ F& g( T. v$ P% l& @
  101.         head[i].vertex=i;: y1 ?8 Y. D: h& v* C
  102.         head[i].next=NULL;
    7 \. Z' z0 Z( ]9 h: x7 W% Z
  103.     }
    / F! e$ ]2 |4 s. h# \
  104.     for(i=0;i<verMax;i++)/ }! f2 v8 b) g5 A( b3 ~
  105.         visit[i]=0;
    1 {8 B4 [& W: H. C

  106. $ Y  f5 t% W$ @: ]" K
  107.     for(i=0;i<20;i++)4 u5 a, ?, X/ \8 O5 c
  108.         create_graph(node[i][0],node[i][1]);# Z. ~6 F8 @5 m- p$ w
  109. 1 v: X7 v6 E3 }, S% D& U  r
  110.     cout<<"======Graph======"<<endl;, B4 \0 ^2 b) P  R% N' F7 c
  111.     for(i=1;i<verMax;i++)
    ! }3 z! r, e; G  [) |/ s& e
  112.     {$ _. b6 }7 ^  o/ X" H1 a
  113.         cout<<"Vertex["<<i<<"]: ";
    : l  n4 G$ {4 A
  114.         print_graph(&head[i]);0 P' \, u! C( y% u
  115.     }
    / D; U( n6 R. v3 ~7 f- o  E. B
  116.     //广度优先搜索( Z- _, X! P- Z3 W# z" O" D& M
  117.     cout<<"Bradth-First-Search:"<<endl<<"&BEGIN==>";
    3 c9 h  n, o+ @' E
  118.     BFS(4);) L7 L$ b8 a  I
  119.     cout<<"END&"<<endl;
    ; M" Q7 B9 X7 g9 {
  120. }
复制代码

6 [) b! j5 G+ f* j- F7 G% n2 b) c) I
) \3 H5 w% B0 s# |: S) C% t8 {/ |& t$ X' L; y  {+ Y" R7 N

本帖被以下淘专辑推荐:


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

本版积分规则

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

GMT+8, 2025-1-31 01:46 , Processed in 0.168915 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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