我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++实现广度优先遍历图

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++实现广度优先遍历图

本文实例为大家分享了C++实现广度优先遍历图的具体代码,供大家参考,具体内容如下

广度优先遍历


void bfs(int start, int parent[], int dist[], int seen[], int visited[]) {
    std::queue <int> q;//建立数据队列q
    int v;
    
    q.push(start);    //让开始序列入栈
    parent[start] = start;      // 开始节点的父节点是开始节点
    dist[start] = 0;            // 初始化距离向量为-1
    seen[start] = 1;       

    while(!q.empty()) {         //如果队列非空
        v = q.front(); q.pop();   //令V是队列的最前端,并将其出栈
        if(visited[v])          // 如果visited[v]=1, continue.
            continue;
        visited[v] = 1;         //否则令visited[v]=1
        std::cout << v << '\n';//输出显示当前节点

        // 遍历v的所有相邻节点
        for(int i = 0; i < graph[v].size(); i++) {
            // 如果v的第i个相邻节点的i并没有访问过
            if(!visited[graph[v][i]]) {

                // 如果这个没有访问过的节点没有被看过
                if(!seen[graph[v][i]]) {
                //压入栈,距离+1,设置父节点
                    q.push(graph[v][i]);
                    dist[graph[v][i]] = 1 + dist[v];
                    parent[graph[v][i]] = v;
                    // 如果已经访问过,令seen=1.
                    seen[graph[v][i]] = 1;
                }
            }
            else {

                // 如果节点已经被访问了,选择距离最小的
                if(dist[v] + 1 < dist[graph[v][i]]) {
                    dist[graph[v][i]] = 1 + dist[graph[v][i]];
                    parent[graph[v][i]] = v;
                }
            }
        }
    }
}

主函数


int main() {

    int n = 8;          // 图中的节点数
    graph = std::vector <std::vector <int> > (n);
    
    // 图的邻接表
    graph[0] = {1, 2};
    graph[1] = {0, 2, 3};
    graph[2] = {0, 1, 5, 6};
    graph[3] = {1, 2, 4};
    graph[4] = {3};
    graph[5] = {2};
    graph[6] = {2, 7};
    graph[7] = {6};

    
    int parent[n+1], dist[n+1], seen[n+1], visited[n+1];
    memset(parent, -1, sizeof(parent));//父节点初始化为-1
    memset(dist, -1, sizeof(dist));//距离向量初始化为-1
    memset(seen, 0, sizeof(seen));
    memset(visited, 0, sizeof(visited));//seen用于判断该节点是否访问过

    int start = 0;      // 开始节点
    bfs(start, parent, dist, seen, visited);

    return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++实现广度优先遍历图

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java中怎么实现广度优先遍历

今天小编给大家分享一下Java中怎么实现广度优先遍历的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是广度优先广度就是扩展
2023-06-29

怎么理解Java优先遍历和广度优先遍历算法

这篇文章主要讲解了“怎么理解Java优先遍历和广度优先遍历算法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java优先遍历和广度优先遍历算法”吧!深度优先遍历主要思路是从图中一个未
2023-06-16

Java遍历树深度优先和广度优先的方法是什么

这篇文章主要介绍了Java遍历树深度优先和广度优先的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java遍历树深度优先和广度优先的方法是什么文章都会有所收获,下面我们一起来看看吧。在编程生活中,我们
2023-07-05

Oracle Level函数实现深度优先遍历

在Oracle数据库中,可以使用CONNECT BY子句和LEVEL伪列来实现深度优先遍历(DFS)首先,创建一个表来存储层次结构数据:CREATE TABLE hierarchy_data (id NUMBER PRIMARY KEY
Oracle Level函数实现深度优先遍历
2024-09-03

简单谈谈Java遍历树深度优先和广度优先的操作方式

这篇文章主要介绍了简单谈谈Java遍历树深度优先和广度优先的操作方式的相关资料,需要的朋友可以参考下
2023-03-24

深度优先和广度优先的Python实现

#coding=utf-8 class Gragh(): def __init__(self,nodes,sides): ''' nodes 表示点 sides 表示边 '''
2023-01-31

Python使用广度优先搜索遍历混乱地铁问题

这篇文章主要介绍了Python使用广度优先搜索遍历混乱地铁问题,广度优先搜索算法(又称宽度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型,需要的朋友可以参考下
2023-05-14

Python怎么使用广度优先搜索遍历混乱地铁

这篇文章主要介绍“Python怎么使用广度优先搜索遍历混乱地铁”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么使用广度优先搜索遍历混乱地铁”文章能帮助大家解决问题。混乱地铁问题【问题描
2023-07-05

Java如何实现基于图的深度优先搜索和广度优先搜索

这篇文章将为大家详细讲解有关Java如何实现基于图的深度优先搜索和广度优先搜索,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.新建一个表示“无向图”类NoDirectionGraphpackage co
2023-05-30

Java实现深度优先搜索(DFS)和广度优先搜索(BFS)算法

深度优先搜索(DFS)和广度优先搜索(BFS)是两种基本的图搜索算法,可用于图的遍历、路径搜索等问题。DFS采用栈结构实现,从起点开始往深处遍历,直到找到目标节点或遍历完整个图;BFS采用队列结构实现,从起点开始往广处遍历,直到找到目标节点或遍历完整个图
2023-05-18

调试广度优先搜索 (BFS) 的实现

php小编柚子为您介绍调试广度优先搜索(BFS)的实现。广度优先搜索是一种用于图和树的遍历算法,它从起始节点开始,逐层地访问相邻节点,直到找到目标节点。在实现BFS算法时,调试是非常重要的环节,它可以帮助我们发现代码中的错误和逻辑问题,提高
调试广度优先搜索 (BFS) 的实现
2024-02-10

Java编程实现深度优先遍历与连通分量代码示例

深度优先遍历深度优先遍历类似于一个人走迷宫:如图所示,从起点开始选择一条边走到下一个顶点,没到一个顶点便标记此顶点已到达。当来到一个标记过的顶点时回退到上一个顶点,再选择一条没有到达过的顶点。当回退到的路口已没有可走的通道时继续回退。而连通
2023-05-30

Python怎么实现图的广度和深度优先路径搜索算法

本篇内容主要讲解“Python怎么实现图的广度和深度优先路径搜索算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现图的广度和深度优先路径搜索算法”吧!前言图是一种抽象数据结构
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录