美文网首页
图论算法(二)广度优先搜索

图论算法(二)广度优先搜索

作者: qratosone | 来源:发表于2016-03-01 00:12 被阅读0次

这是一种连通图的常用遍历策略,通常用于求起点到各点的最短路径,以及求两点之间的最优路径等问题。首先我们先来看看广度优先搜索的具体方法吧:

对于一个连通图,我们假设一开始所有顶点均未被访问,广度优先搜索的主要操作如下:

1 选择图中任意一个顶点 v 作为起点进行访问,并将顶点 v 标为已访问。
2 遍历并访问与顶点 v 相邻且未被访问的所有顶点 c1c1, c2c2, …, ckck;接着遍历并访问与顶点 c1c1, c2c2, …, ckck 相邻且未被访问的顶点——也就是依次访问所有相邻顶点的相邻顶点;以此类推,直到所有顶点均被访问。

对于算法的具体实现,结合队列先进先出的特性,我们可以借助队列这一数据结构来实现广度优先搜索:

1 任意选择一个顶点 v 作为起点,加入队列;
2 访问队首元素 v 并标记,将其从队列中删除;
3 遍历与顶点 v 相邻且未被访问的所有顶点 c1c1, c2c2, …, ckck,并依次加入到队列中;
4 重复第二步和第三步操作,直到队列为空。

void bfs(int start_vertex) {
     queue<int> bfs_queue;
     bfs_queue.push(start_vertex);
     while (!bfs_queue.empty()) {
         int vertex = bfs_queue.front();
         cout << vertex << endl;
         bfs_queue.pop();
         for (int adj_vertex: edges[vertex]) {
             if (!visited[adj_vertex]) {
                 visited[adj_vertex] = true;
                 bfs_queue.push(adj_vertex);
             }
         }
     }
}

相关文章

  • 图论算法(二)广度优先搜索

    这是一种连通图的常用遍历策略,通常用于求起点到各点的最短路径,以及求两点之间的最优路径等问题。首先我们先来看看广度...

  • 搜索

    一、深度优先搜索 图深度优先遍历、深度优先搜索算法求有权图两点最短路径 二、广度优先搜索 图广度优先遍历、广度优先...

  • 算法基础-深度优先搜索

    深度优先搜索(DFS)和广度优先搜BFS)是图论相关算法的基础,先学习这两个思想(工具)为后续学习更多算法做准备。...

  • 算法与数据结构 之 搜索算法

    搜索分为广度优先搜索、深度优先搜索、A*算法。 一、广度优先算法(BFS) 1.1、基本实现和特性:BFS是从一个...

  • 广度优先搜索算法

    上一篇简书小编分享了“深度优先搜索”算法,今天小编继续分享下“广度优先搜索”算法。 一、何为“广度优先搜索” 广度...

  • 广度优先搜索算法(BFS)

    广度优先搜索算法(BFS) 标签(空格分隔): algorithm 1.广度优先搜索算法(Breadth Firs...

  • 算法(三):图解广度优先搜索算法

    算法简介 广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索",...

  • python 广度优先算法

    文章概述 广度优先搜索算法概述 广度优先搜索算法 广度优先算法是基于树或者图的,当然树也是一种特殊的图,因此我们先...

  • 基于邻接表的广度优先搜索

    数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000MS Memory Limit...

  • 【数据结构】广度优先搜索算法BFS

    对于广度优先遍历算法DFS可以参考前一篇文章【数据结构】深度优先搜索算法DFS 广度优先遍历 广度优先遍历(Bre...

网友评论

      本文标题:图论算法(二)广度优先搜索

      本文链接:https://www.haomeiwen.com/subject/hgigkttx.html