广度优先搜索

这是一篇介绍广度优先搜索的文章,网上有很多关于广度优先搜索的例子,这篇博客就当做是学习笔记吧!
图在计算机内的表示方法主要有邻接表和邻接矩阵两种。

  • 邻接表:适合在稀疏图,且图的节点比较多的时候,邻接表在判断图的出度的时候比较方便,但是在判断入度的时候就需要遍历整个邻接链表来找到。邻接表存储图的空间复杂度为O(V + E)(V表示节点的个数,E则表示所有的边)
  • 邻接矩阵:适合在稠密的节点比较少的图中。在判断出度,入度和判断是否存在从一个节点到另一个节点的边的时候使用比较方便;邻接矩阵存储图的空间复杂度为O(V * V).

一般情况默认使用邻接链表来存储矩阵,下面是搜索邻接链表的BFS算法。在遍历的过程中使用白色,黑色和灰色对节点进行标记:白色表示还没有访问的节点,灰色表示访问过,但是还没有将它的邻接节点访问完的节点,黑色则表示已经访问过且访问了所有它的邻接节点的节点。G(V, E)表示图,(u, v)表示从u节点到v节点的边,Vπ表示节点v的前驱节点:

BFS G(V, s)  //s stands for the souce node
    //at first we need to initialize all the node;
    for all the vertex u in G(V, E) - {s}
        u.color = white;
        u.d = INT_MAX;
        u.π = NULL;
    s.color = grey;
    s.d = 0;
    s.π = NULL;
    queue<node> que;
    que.pus(s);
    while (!que.empty())
        node temp = que.front();
        que.pop();
        for each v in G.Adj(u)
            v.color = grey;
            v.d = u.d + 1;
            v.π = u;
            que.push(v);
        temp.color = black;

这样就完成了对图的广度优先搜索遍历,事实上在遍历的过程中还可以建立个广度优先搜索树。
广度优先搜索的应用
(1)判断一个图是不是连通的,广度优先搜索完成后,搜索到的节点包含了图上所有的节点,那么图就是连通的;
(2)寻找从一个节点到另一个节点的最短路径。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值