找回密码
 立即注册!
搜索

小喇叭+ 发布

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
查看: 1883|回复: 0

广度优先搜索

[复制链接]

11

主题

57

回帖

585

积分

清正廉明~版主

风纪委员

积分
585

最佳新人活跃会员

发表于 2020-7-18 11:37:54 | 显示全部楼层 |阅读模式 IP:浙江嘉兴
算法过程:
1.将根节点放入队列中
2.从队列中取出第一个元素,将队列中的第一个元素弹出
3.将所取得元素的全部节点加入队列中
4.判断队列是否为空
     a. 若是,则结束
     b.若不是,则跳到第二步
  1. #include <iostream>9 c  Y, U4 R5 \8 K5 M& x
  2. using namespace std;% o1 ~3 X. u- ^% a: O7 Z( k
  3. 9 {2 f! n# z- p& ^) w0 D
  4. const int verMax=9;2 K' z) X- v$ d# A4 u  j( k0 e# X' J
  5. const int queMax=10; // >=9皆可
    / m9 C3 z  b% X' J% W. I8 h' ~( x, o4 |
  6. 5 s, a) ?9 j. c+ p
  7. struct node//声明图形顶点结构' v4 q' u2 S4 D
  8. {
    3 ~" ]+ |" i  x# d
  9. int vertex;
    + y/ L! t. j( `- l/ @, ^$ g0 k3 {1 ?
  10. struct node *next;2 l/ n% l# k+ O* J& ]
  11. };
    3 x- I. |9 S$ Y8 ~& o5 {' Z

  12. 0 V4 X) v4 u  e# S9 N1 C! Y
  13. typedef struct node *graph;8 {+ j/ d7 q1 c
  14. struct node head[verMax];//声明顶点结构数组5 ]5 P  V3 n0 S' p" {! `8 Z
  15. int que[queMax];! b: s$ Z+ t& f( w, Z/ s2 D0 l) o
  16. int front=-1;
    4 j2 x% y5 ]( c
  17. int rear=-1;* z3 Z" F, t3 {* M. N
  18. int visit[verMax];//查找记录//队列的存入
    6 b+ g1 k# D2 s8 V" m: {, @

  19. ) U7 [! N* C! c" D! N( l
  20. int enque(int v): {+ j3 Z" A, t) O. w# f5 j
  21. {  M! t' i$ K3 @5 Y! N- w
  22.     if(rear>=queMax)//队列已满( O7 S: R* m$ a1 V
  23.     return -1;4 A; _6 ^- Q5 I+ f2 b6 n
  24. else
    % |4 X/ y; @' K- V/ x; o
  25. {; A5 x6 z. F3 i' @
  26.     rear++;//对了尾端指针后移7 p9 z9 i( l9 _% Q8 f$ U- T
  27.     que[rear]=v;//将值存入队列中
    $ r. A) A- `6 [3 h
  28.     return 1;
    ! a7 n+ H3 u- k. G! Y, @# J
  29.     }
    " P  Y$ n! n1 `) H# K9 v7 z4 z/ W. w
  30. }
    8 M% p* o5 _* I% @3 m4 _+ z6 q
  31. //队列的取出
    & `: f+ X" p2 M& E
  32. int deque()- `' C2 U4 n! e, u
  33. {7 |) A* M2 @5 w1 _4 F
  34.     if(front==rear)//队列已空. I* j( h. l" Z: \: s$ ]
  35.         return -1;5 z7 d4 ~. ?' x' p
  36.     else9 p- l& C* o& Z& w$ V; v; q  H& H
  37.     {3 b: h8 K3 n  R' F- h4 `7 L
  38.         front++;
    ; w  n, b8 A. Q" V
  39.         return que[front];6 l( R9 a  b3 r4 n, m$ x- E
  40.     }
    + @" E3 x0 I/ I5 L4 ~4 {, J, M7 r
  41. }
    3 Z6 X0 ~4 o1 n' W
  42. //广度优先搜索法
    # b2 v8 ?! e+ x$ Q1 H1 O$ R8 s
  43. void BFS(int v)
    # A. c& ]  Z3 p" X1 z, B! ^
  44. {
    & B1 J0 X4 t( j: l" {7 w* t$ `
  45.     graph point;, I6 L1 h* S1 m& s/ y  @( V
  46.     enque(v);//存入队列
    & m; ^- W# b1 x
  47.     visit[v]=1;//已查找6 L! M1 e8 r9 V" g) O
  48.     cout<<"["<<v<<"]==>";
    , h$ F1 x* S. ^/ v( F0 @
  49.     while(front!=rear)
    8 ]: F* n* S* w8 H* Q5 T5 T
  50.     {$ F5 |0 S9 \% R
  51.         v=deque();: a! e$ _- M$ \- @- F; g) v$ i# O! b* G
  52.         point=head[v].next;9 N: q8 ~& C3 V& I
  53.         while(point!=NULL)//读入邻接列表所有顶点
    # t/ j  k4 O2 d( C
  54.         {* l2 [8 h2 Y. b: h2 z$ _4 E
  55.             if(visit[point->vertex]==0)4 f4 T+ s, ]. e; x9 {
  56.             {( }& P5 C) w& ~; r" g. U( e  f
  57.                 enque(point->vertex);//存入队列
    + T, {4 B7 B" C. [- M+ t3 q  j
  58.                 visit[point->vertex]=1;//已查找过的顶点
    % T$ s$ R, D/ V; P2 G2 W
  59.                 cout<<"["<<point->vertex<<"]==>";
    + W, {& x- l' ?! z; e7 w
  60.             }
      d$ a/ O. @$ T3 X9 d
  61.             point=point->next;
    / Y  a# G) _. H) Y( {# n0 e
  62.         }1 V" D# l1 v: a! ^. o& W1 w0 F
  63.     }
    7 m! ~( U* S" I  Y' l
  64. }1 p+ K3 R. ~- [* I- z6 P
  65. //建立邻接顶点至邻接列表内
    % P1 `9 u1 y( m( A4 F1 ?% Z( ]
  66. void create_graph(int v1,int v2)# X, g) i9 H5 Q7 Y! Q
  67. {
    + g2 }! X3 r" z1 i, C
  68.     graph point,New;7 r( E# T! `7 I( h/ W4 L
  69.     New=(graph)malloc(sizeof(struct node));. _* `1 O1 u7 W6 k2 U) ]6 G
  70.     if(New!=NULL)
    : W/ W: g, [2 N& W' b% c8 i4 w  S. C1 l, N
  71.     {
    9 g0 `! G, ?5 Z8 K7 O
  72.         New->vertex=v2;//邻近顶点7 T8 j3 X4 T' N
  73.         New->next=NULL;
    4 W+ w5 P  i) ^4 Q
  74.         point=&(head[v1]);
    : _7 X, W9 k" ?( M& n
  75.         while(point->next!=NULL)
    " Z7 b) _& n- s4 P1 p; l. j
  76.             point=point->next;
    1 n; j3 p; m4 }1 A. ~7 V5 `
  77.         point->next=New;//串连在列表尾端1 z* m+ y1 g4 u# x+ j" d2 Y9 [
  78.     }
    ( y# F0 i8 ?. q* W* I
  79. }- A) ~" r6 V" X& |5 t
  80. //输出邻接列表内数据6 W9 @) o% T2 j
  81. void print_graph(struct node *head)! f4 a8 }8 g( Y5 K' k
  82. {
    4 x% D& O1 ^) A! @8 n  i" l! @
  83.     graph point;
    9 f  n) D4 E- L' `  o/ b9 x) K
  84.     point=head->next;//设置point为首节点+ m- F! h5 m6 i7 h3 u1 b1 W
  85.     while(point!=NULL)) o( s5 y2 z0 J! i
  86.     {
    3 t8 z: E6 ]% g  X+ q  v
  87.         cout<<"["<<point->vertex<<"] ";/ {# L9 K" [* V, h0 M$ o
  88.         point=point->next;4 S7 P& o/ }$ ^! k
  89.     }
    6 t/ L) s, ]9 y1 r3 E" t& b
  90.     cout<<endl;
    1 z9 s  w# L6 W% L; n9 o
  91. }& F9 a$ X$ J& p8 l" b$ f  t5 c, `, I
  92. //主程序2 S+ y: I# E* K' f5 g" i3 h% K
  93. void main()
    7 T: ^* I7 {8 n. ~7 X
  94. {
    # D3 l' G7 k. j6 z
  95.     int node[20][2]={
    ' I8 C% o4 z2 R
  96.     {1,2},{2,1},{1,3},{3,1},{2,4},{4,2},{2,5},{5,2},{3,6},{6,3},4 p3 T6 `  U* m( U: |
  97.     {3,7},{7,3},{4,8},{8,4},{5,8},{8,5},{6,8},{8,6},{7,8},{8,7}};$ b. r, V; k& E* v  a* m' |
  98.     int i;8 D& ~: ^/ y9 S' r3 ~' v/ X
  99.     for(i=0;i<verMax;i++)9 c. i7 j6 f2 }+ S4 q) t
  100.     {. N: p- o# D4 r0 Z6 c9 \
  101.         head[i].vertex=i;, N. d/ d6 c) T- b
  102.         head[i].next=NULL;
    ; n4 I, D4 J7 d. k
  103.     } ! j* K' J. m5 J7 V
  104.     for(i=0;i<verMax;i++)
    0 c( ?* q( ]9 s
  105.         visit[i]=0;8 {4 B) J4 y3 y- y
  106. ! z- D1 R: m& @: @0 R% Y& J% r4 D
  107.     for(i=0;i<20;i++)
    1 W1 M) z( u2 E% g$ S4 s
  108.         create_graph(node[i][0],node[i][1]);
    5 w/ b1 M* Y6 {) A8 J
  109. : q& a, T, L% U: E
  110.     cout<<"======Graph======"<<endl;' Y9 e. x& d, Y7 O' K- N
  111.     for(i=1;i<verMax;i++)
    ; u5 b: d2 V1 {2 ?: C* b
  112.     {3 p; l( p4 f. e' e
  113.         cout<<"Vertex["<<i<<"]: ";, f) M+ N( {2 U# X  T5 s
  114.         print_graph(&head[i]);5 {- H& y1 i  @, W
  115.     } * F- Q+ W' [8 ~, c8 C
  116.     //广度优先搜索& l! c  L9 \1 b6 s$ T
  117.     cout<<"Bradth-First-Search:"<<endl<<"&BEGIN==>";5 O8 c$ H- w2 v$ N% K1 L( v
  118.     BFS(4);. W5 o# C& v; \4 ]! M
  119.     cout<<"END&"<<endl;
    9 Y8 b) L5 |4 n8 W0 w! O
  120. }
复制代码
( L- }/ X+ X' Y' _

: ~" \+ @' W$ z& l
/ R) j* u! `! p6 }! Y$ M, U& k

本帖被以下淘专辑推荐:


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

本版积分规则

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

GMT+8, 2025-4-26 21:15 , Processed in 0.596897 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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