猿创征文 |【数据结构】2个例题带你理解图的遍历:广度优先搜索

news/2024/5/17 17:14:49/文章来源:https://blog.csdn.net/zsy3757486/article/details/126827672

目录

1、定义

2、算法分析

3、算法实现

4、性能分析


💟作者简介:大家好呀!我是路遥叶子,大家可以叫我叶子哦!❣️    
📝个人主页:【叶子博客】
🏆博主信息:四季轮换叶,一路招摇胜!

🐋希望大家多多支持😘一起进步呀!~❤️
🌈若有帮助,还请【关注点赞收藏】,不行的话我再努力努力呀!💪
————————————————
🍁欢迎各位的加入,一起壮大社区发展学习,叶子等着你们【叶子社区】

1、定义

  • 从图中的某个顶点v开始,先访问该顶点再依次访问该顶点的每一个未被访问过的邻接点 w1、w2、...

  • 然后按此顺序访问顶点w1、w2、...的各个还未被访问过的邻接点。

  • 重复上述过程,直到图中的所有顶点都被访问过为止。

练习1:从v0出发,写出它的按广度优先搜索进行遍历的遍历序列。

 广度优先搜索过程:

  • 对于一个图,从某个顶点出发可得到多种搜索遍历结果,即一个图的BFS序列不唯一。

  • 给定起始点图的存储结构时,BFS算法所给出的BFS序列是唯一的。

练习2:从v点出发,写出它的按广度优先搜索进行遍历的遍历序列。

  广度优先搜索过程:

​​​2、算法分析

  • 核心思想:使用队列记录所有的结点,只要进入到队伍,表示被访问。

  • 广度优先搜索遍历中,需要使用队列,依次记住被访问过的顶点,因此,算法开始时,访问起始点V,并将其插入队列中,以后每次从队列中删除一个数据元素,就依次访问它的每一个未被访问过的邻接点,并将其插入队列中。这样当队列为空的时候,表明所有与起始点相通的顶点都已被访问完毕,算法结束。

  • 顶点的出队顺序,就是广度优先搜索遍历的序列。


3、算法实现

  • 算法核心:

    • 使用一个队列记录当前节点,所有未被访问的邻接点。

    • 使用一个visited数组,记录顶点是否被访问

public class BTraverser {private static boolean[] visited;// 访问标志数组// 对图G做广度优先遍历public static void BFSTraverse(IGraph G) throws Exception {visited = new boolean[G.getVexNum()];// 访问标志数组for (int v = 0; v < G.getVexNum(); v++)// 访问标志数组初始化visited[v] = false;for (int v = 0; v < G.getVexNum(); v++)if (!visited[v]) // v尚未访问BFS(G, v);}private static void BFS(IGraph G, int v) throws Exception {visited[v] = true;System.out.print(G.getVex(v).toString() + " ");LinkQueue Q = new LinkQueue();// 辅助队列QQ.offer(v);// v入队列while (!Q.isEmpty()) {int u = (Integer) Q.poll();// 队头元素出队列并赋值给ufor (int w = G.firstAdjVex(u); w >= 0; w = G.nextAdjVex(u, w))if (!visited[w]) {// w为u的尚未访问的邻接顶点visited[w] = true;System.out.print(G.getVex(w).toString() + " ");Q.offer(w);}}}public static void main(String[] args) throws Exception {ALGraph G = GenerateGraph.generateALGraph();BTraverser.BFSTraverse(G);}
}

4、性能分析

广度优先搜索遍历图的过程,实际上就是寻找队列中顶点的邻接点的过程。

假设图中有n个顶点和e条边

  • 时间复杂度

    • 当图的存储结构采用邻接矩阵时,需要扫描邻接矩阵的每一个顶点,其时间复杂度为O(n2)

    • 当图的存储结构采用邻接表时,需要扫描邻接表中的每一个单链表,其时间复杂度为O(e)

  • 空间复杂度

    • 需要使用队列,依次记住被访问过的顶点,每一个顶点最多入队、出队一次,空间复杂度为O(n)

    • 增设一个辅助数组visited,空间复杂度为O(n)。


写到最后

四季轮换,已经数不清凋零了多少, 愿我们往后能向心而行,一路招摇胜!

🐋 你的支持认可是我创作的动力

💟 创作不易,不妨点赞💚评论❤️收藏💙一下

😘 感谢大佬们的支持,欢迎各位前来不吝赐教

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_6995.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jquery实现云音乐歌词高亮和自动滚动效果

书接上篇文章 实现效果&#xff1a; 一、歌词高亮 首先要判断当前歌词和播放器的当前时间 循环歌词数组treatLyrics&#xff0c;拿到每条歌词的时间与播放器的当前时间playAudio.currentTime进行比较 treatLyrics.forEach((i, index) > { // console.log(i); // console.…

目前最好用的NAS系统是什么?

NAS被定义为一种特殊的专用数据存储服务器&#xff0c;包括存储器件&#xff08;例如磁盘阵列、CD/DVD驱动器、磁带驱动器或可移动的存储介质&#xff09;和内嵌系统软件&#xff0c;那么目前最好用的nas系统是什么&#xff1f; 常见的NAS系统有哪些 Nas 系统一般都是基于 Li…

Uplink Resource Allocation in IEEE 802.11ax

一、基本信息 题目&#xff1a;IEEE 802.11ax中的上行链路资源分配 作者&#xff1a;Sudeep Bhattarai, Gaurang Naik, Jung-Min (Jerry) Park 摘要&#xff1a;MU-OFDMA使得多个用户可以在更小的子信道(即资源单元&#xff0c;RUs)中同时进行传输&#xff0c;从而提高802.11ax…

如何从零开始解读产品经理行业分析

上次一起了解了什么是产品经理&#xff0c;产品经理PM和PD在不同类型公司的作用。了解产品经理对当前的应用产品中的重要作用。是不是有点憧憬&#xff0c;其实憧憬是美好的&#xff0c;但是还是要走进现实具体怎么去做&#xff0c;一步一步脚踏实地的&#xff0c;一步一步走入…

【Linux入门】— 腾讯云服务器的搭建

꧁ 各位大佬们好&#xff01;很荣幸能够得到您的访问&#xff0c;让我们一起在编程道路上任重道远&#xff01;꧂ ☙ 博客专栏&#xff1a;【Linux知识】❧ ⛅ 本篇内容简介&#xff1a;Linux小白到精通 — 学好Linux从学会服务器搭建开始&#xff01; ⭐ 了解作者&#xff1…

Java操作Zookeeper框架

Zookeeper框架 注&#xff1a;大家觉得博客好的话&#xff0c;别忘了点赞收藏呀&#xff0c;本人每周都会更新关于人工智能和大数据相关的内容&#xff0c;内容多为原创&#xff0c;Python Java Scala SQL 代码&#xff0c;CV NLP 推荐系统等&#xff0c;Spark Flink Kafka Hb…

Java Double equals()方法具有什么功能呢?

转自: Java Double equals()方法具有什么功能呢&#xff1f; 下文笔者将讲述equals()方法的功能简介说明&#xff0c;如下所示: equals()方法的功能 java.lang.Double.equals()方法的功能: 将当前的Double对象同一个对象进行比较&#xff0c; 当Object是一个Double对象&…

【牛客 - 剑指offer】JZ8 二叉树的下一个结点 Java实现

文章目录剑指offer题解汇总 Java实现本题链接题目方案一 中序遍历递归代码一 设置flag标记代码二 获取整个arrayList的大小方案二 分类直接寻找&#xff08;分情况讨论&#xff09;思路代码&#xff08;版本一&#xff09;代码&#xff08;版本二&#xff09;剑指offer题解汇总…

计算机毕业设计成品java项目开发实例SSM+MySQL实现的家庭医生预约平台

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 一、项目介绍 二、项目截图 三、项目获取 一、项目介绍 java毕业设计计算机毕设项目之基于SSMMySQL实现的家庭医生预约平台_哔哩哔哩_bilibilijava毕业设计计算机毕设项目之基于SSMMyS…

记首次协助搭建服务器

一&#xff0c;服务器资源申请 1&#xff09;使用云服务器&#xff08;k8s&#xff09;还是IDC服务器 云服务器VS IDC服务器 不同&#xff1a; 费用一样&#xff0c;云服务器支持动态扩容 私有云和IDC没有很大区别&#xff0c;只是私有云支持k8s&#xff0c;动态扩容方便。…

python 日志处理(基础篇)

Logging处理 日志级别等级排序&#xff1a;critical > error > warning > info > debug debug : 打印全部的日志( notset 等同于 debug ) info : 打印 info, warning, error, critical 级别的日志 warning : 打印 warning, error, critical 级别的日志 error : 打…

笑霸餐厅 | 瑞吉外卖项目 | 完整基础部分(后端学习笔记)

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;项目专栏 &#x1f4e7;如果文章知识点有错误的地方&#xff0c;…

Android ActionBar

android的ActionBar是3.0才推出的,3.0之前称之为AppBar。为了向后兼容,ActionBar位于Android的支持库AppCompat中,所以要使用ActionBar先必须依赖AppCompat库(现在新建的工程默认都依赖此库了)implementation androidx.appcompat:appcompat:1.3.0如果没有在主题Theme中或Ac…

【小月电子】安路国产FPGA开发板系统学习教程-LESSON6按键消抖

按键消抖例程讲解若要观看该博客配套的视频教程&#xff0c;可点击此链接根据多年工作经验&#xff0c;总结出的FPGA的设计流程&#xff0c;概括起来总共有以上12步&#xff0c;其中根据项目难易度可省去其中一些步骤。比如非常简单的项目&#xff0c;我们可以省去虚线框里面的…

java基于微信小程序的电影院购票选座 uniapp 小程序

随着移动应用技术的发展,越来越多的用户借助于移动手机、电脑完成生活中的事务,许多的传统行业也更加重视与互联网的结合,由于城镇人口的增加,人们去电影院总是排着长长的队伍,对于时间紧的人是一个非常头痛的事情,有的人可能就是排队也要用去半天时间,人们为了缓解排队就购票的…

TFT-eSPI入门使用教程

一、准备资料开发板:ESP32-S3 屏驱动是:ST7789_DRIVER 开发环境:VS Code + PlatformIO注意:以上是我使用的环境,不一定需要和是使用的东西一样,这里主要是学习TFT-eSPI开源驱 二、获取TFT-eSPI GitHub:https://github.com/Bodmer/TFT_eSPI 三、配置User_Setup.h文件 在路…

【软件与系统安全笔记】二、软件与系统安全基础

【软件与系统安全】二、软件与系统安全基础 这是《【软件与系统安全】笔记与期末复习》系列中的一篇 2022-01-17 第二次课 2022-02-21 第三次课前部分 计算机安全的目标&#xff1a; 防止信息“遭遇不测事件”, 但不能阻止“好的事情”发生&#xff08;“好的事情”包括功能性…

基于Android studio+SSH的单词记忆(背单词)APP设计

目录 引言 3 1.1. 项目介绍 3 课程设计选题《单词记忆APP》 3 1.2. 项目的目的和意义 3 1.3. 相关技术介绍 5 1.3.1. ionic angular cordova混合框架 5 1.4. 后端SSH框架 6系统需求分析 8 2.1. 软件功能 8 2.1.1. 需求分析 8 2.2. 功能性需求 9项目介绍 10 3.1. 系统的开发环…

手机上有没有跨平台轻量级的备忘录?

当你在读书时,如果想要随手记录读书笔记,那你会采取什么方式做读书笔记呢?当你在工作时,如果想要随后记录工作注意事项或常用的一些工作资料,那你会如何记录呢?相信有不少网友都会使用手机上的备忘录软件来做读书笔记,随手记事;而在电脑上会直接使用TXT或Word来记录工作…

Apple Xcode 14 (14A309) 正式版发布(含下载)

请访问原文链接&#xff1a;Apple Xcode 14&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org Xcode 14 包含了在所有 Apple 平台上开发、测试和分发 App 所需的一切资源。利用 Swift 和 SwiftUI 的易用性与强大能力以及全新…