数据结构——图(图的遍历)

article/2025/10/28 18:58:33

图的遍历

  • 图的遍历
  • 深度优先遍历(DFS)
  • DFS算法效率分析
  • 深度优先遍历算法的实现
  • 广度优先搜索遍历(BFS)
  • BFS算法效率分析
  • DFS与BFS算法比较

图的遍历


遍历定义:从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算

遍历的实质:找每个顶点的邻接点的过程

图的特点:图中可能存在回路,且图的任一顶点都可能与其他顶点想通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点

怎样避免重复访问?
解决思路:设置辅助数组 v i s i t e d [ n ] visited[n] visited[n],用来标记每个被访问过的顶点

  • 初始状态 v i s i t e d [ i ] visited[i] visited[i] 为0
  • 顶点 i i i 被访问,改 v i s i t e d [ i ] visited[i] visited[i] 为1,防止被多次访问

图常用的遍历:

  • 深度优先搜索(Depth_First Search——DFS
  • 广度优先搜索(Breadth_First Search——BFS

结论:
  稠密图适于在邻接矩阵上进行深度遍历
  稀疏图适于在邻接表上进行深度遍历

深度优先遍历(DFS)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

DFS算法效率分析

  • 用邻接矩阵来表示图,遍历图中每一个顶点都要从头扫描该顶点所在行,时间复杂度为 O ( n 2 ) O(n^2) O(n2)
  • 用邻接表来表示图,虽然有 2 e 2e 2e 个结点,但只需扫描 e e e 个结点即可完成遍历,加上访问 n n n 个头结点的时间,时间复杂度为 O ( n + e ) O(n+e) O(n+e)


深度优先遍历算法的实现


在这里插入图片描述

  • 初始状态 v i s i t e d [ i ] visited[i] visited[i] 为0
  • 顶点i被访问,改 v i s i t e d [ i ] visited[i] visited[i] 为1,防止被多次访问

算法实现:

void DFS(AMGraph G, int v){		//图G为邻接矩阵类型cout << v;				//访问第v个顶点visited[v] = true;for(w = 0; w < G.vexnum; w++)		//依次检查邻接矩阵v所在的行if((G.arcs[v][w] != 0) && (!visited[w]))		//w是v的邻接点,如果w未访问,则递归调用DFSDFS(G, w)
}


广度优先搜索遍历(BFS)

方法:
  从图的某一结点出发,首先依次访问该结点的所有邻接顶点 v i 1 vi_1 vi1 v i 2 vi_2 vi2,… v i n vi_n vin,再按只写顶点被访问的先后次序依次访问与他们相邻接的所有未被访问的顶点;
  重复此过程,直至所有顶点均被访问为止
在这里插入图片描述
在这里插入图片描述
实现过程的讲解:https://www.bilibili.com/video/BV1nJ411V7bd?p=125

算法实现:

//按该广度优先非递归遍历连通图G
void BFS(Graph G, int v){cout << v;			visited[v] = ture;			//访问第v个顶点InitQueue(Q);				//辅助队列Q初始化,置空EnQueue(Q, v);				//v进队while(!QueueEmpty(Q)){		//队列非空DeQueue(Q, u);			//队头元素出队并置为ufor(w = FirstAdjVex(G,u); w >= 0; w = NextAdjVex(G, u, w))if(!visited[w]){		//w为u的尚未访问的邻接顶点cout << w;visited[w] = ture;Enqueue(Q, w);		//w进队}//if}//while
}//BFS


BFS算法效率分析

  • 如果使用邻接矩阵,则BFS对于每一个被访问到的顶点,都要循环检测矩阵中的整整一行( n n n个元素),总的时间代价为 O ( n 2 ) O(n^2) O(n2)
  • 用邻接表来表示图,虽然有 2 e 2e 2e 个结点,但只需扫描 e e e个结点即可完成遍历,加上访问n个头结点的时间,时间复杂度为 O ( n + e ) O(n+e) O(n+e)

DFS与BFS算法比较

  • 空间复杂度相同,都是 O ( n ) O(n) O(n)(借用了堆栈或队列)
  • 时间复杂度只与存储结构(邻接矩阵或邻接表)有关,而与搜索路径无关

http://chatgpt.dhexx.cn/article/VHefP5ev.shtml

相关文章

图的遍历 (深度优先遍历和广度优先遍历)

一. 什么是深度优先遍历 深度优先遍历可定义如下&#xff1a;首先访问出发点v&#xff0c;并将其标记为已访问过&#xff1b;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过&#xff0c;则以w为新的出发点继续进行深度优先遍历&#xff0c;直至图中所有和源点v有路径相通的…

图的遍历

图的遍历 介绍 是从图的某一顶点出发&#xff0c;按照某种搜索方式对图中所有顶点访问一次且仅一次。图的遍历可以解决很多搜索问题&#xff0c;在实际中应用非常广泛。图的遍历根据搜索方式的不同&#xff0c;分为广度优先搜索和深度优先搜索。 一.深度优先遍历 1.1介绍 深…

视频和图片合成软件,简单快速合成视频和图片

怎么把小视频和图片合成起来&#xff1f;有简单好上手的教程吗&#xff1f;今天就教大家简单几步&#xff0c;把视频和图片合成为照片视频。先看看用数码大师合成视频和图片的效果截图&#xff1a; 第一步&#xff1a;把图片一次性导入&#xff0c;为照片配上文字 点击“添加…

多张图片怎么合成gif?

多张图片怎么合成gif&#xff1f;gif动图是我们比较熟悉的一种网络聊天表情包&#xff0c;通常都是由图片或者视频转换而来的。很多小伙伴会选择用PS来制作GIF动图&#xff0c;但并不是所有小伙伴都会使用PS&#xff0c;所以一个自动简单&#xff0c;可以将图片或者视频直接转换…

android将图片做成视频播放,如何把图片做成视频【图文教程】

教你怎么将手机拍摄的一张张图片整合转换成视频播放更唯美。下面以直走婚纱mv电子相册为例。 安装好软件&#xff0c;先运行绿化程序&#xff0c;然后再运行软件&#xff0c;详情请参看使用说明txt文档。打开之后&#xff0c;有两个模式供你选择&#xff0c;左边是标准模式、右…

php把图片合成视频,如何把照片做成视频 照片音乐视频制作 并插入几段短视频片段...

如何把照片制作成视频&#xff1f;相信大家都已经有所耳闻了&#xff0c;把平时手机或者相机上拍摄的照片&#xff0c;还有拍摄的视频都可以合起来&#xff0c;再添加背景音乐就成了一个非常有纪念价值的视频了。然而已经不是只有照片和音乐的视频了&#xff0c;整个视频全是照…

视频转图片-人脸识别-合成视频

视频转图片-人脸识别-合成视频 代码&#xff1a; import cv2 import os,sys import numpy as npface_xml cv2.CascadeClassifier(r"C:\Users\lenovo\Desktop\python\jiqixuexi\haarcascade_frontalface_default.xml") eye_xml cv2.CascadeClassifier(r"C:\U…

怎样用计算机合并视频,电脑视频合并软件 , 怎样把多个视频合成为一个

昨天小编在搜梁博的歌曲《表态》的视频时(这首歌小编觉得真的很好听推荐下)在一个剪辑视频发现他将梁博在某综艺唱的歌曲全都剪辑在视频里。这里就运用到了一个剪辑视频知识&#xff0c;合并视频。既然看到小编就准备跟大家伙讲讲这个视频剪辑内容。如何把多个视频合并在一个视…

php合成视频特效,视频合并加转场效果

热爱视频后期剪辑的朋友都会知道&#xff0c;在视频的后期制作过程中&#xff0c;常见操作中就有视频合并这一项&#xff0c;及在视频之间加入转场效果&#xff0c;为影视编辑作品带来绚丽多彩的视觉效果&#xff0c;不禁会使人眼前一亮。接下来给大家介绍一款简易好用的视频编…

php 图片生成视频,图片转化为视频的方法 如何将照片制作成为视频

点击上方的下载地址&#xff0c;然后将软件进行安装。安装完毕后&#xff0c;打开软件在这个界面可以选择软件的比例大小和操作模式&#xff0c;我们选择“4:3”和“全功能模式”。 接着我们将要进行操作的图片导入到软件&#xff0c;点击“导入”后在“打开”界面选中所有的图…

ffmpeg使用(多个帧合成视频)

帧生成视频命令&#xff1a; ffmpeg -threads 2 -y -r 24 -i %05d.jpg output.mp4 视频生成帧命令&#xff08;按帧生成图片&#xff09;&#xff1a; ffmpeg -i checkpoints_dstt_car-turn_result.mp4 chaifen/%06d.png 1、下载ffmpeg安装包 https://github.com/BtbN/FFmpe…

matlab jpg合成gif,用MATLAB将照片合成视频或者GIF图片、以及Photoshop制作GIF图片

用MATLAB将照片合成视频或者GIF图片、以及Photoshop制作GIF图片 一、用MATLAB将照片合成视频(我使用的MATLAB是2015版本的) (1)、你需要需要合成视频的图片。 所有照片放在一个文件夹里面因为是使用Matlab的dir函数读取照片,所以读取时,你要先设置好文件名:图片名称按照“00…

FFmpeg初探——基于FFmpeg的图片合成视频

前言 商家在发布商品的时候&#xff0c;大部分情况下是没有视频的&#xff0c;这样往往会造成商品展示不全等问题&#xff0c;而视频制作又比较麻烦&#xff0c;为了解决此痛点&#xff0c;我们需要提供一键合成视频的功能。 之所以选择 FFmpeg&#xff0c;是因为我们期望后续能…

视频照片合成软件哪个好?快速把手机照片做成视频,简单操作,效果精美!

视频照片合成软件哪个好&#xff1f;怎么把照片合成视频&#xff1f;如何快速把手机照片做成视频&#xff1f; 这是我用数码大师把手机照片合成视频的效果截图&#xff1a; 第一步&#xff1a;快速导入多张照片&#xff0c;为照片配上文字 点击“添加相片”就能快速导入照片…

ffmpeg图片+音频合成视频

命令如下&#xff0c;个人纪录 ffmpeg -framerate 0.05 -f image2 -loop 1 -y -i d:/img/img%d.jpg -i d:/img/gyz.mp3 -s 1080*1920 -r 25 -t 100 d:/img/output.mp4 -framerate 速率&#xff0c;越小每张图片停留时间越长 -loop 循环一遍文件夹内的图片 -i 图片路径&#x…

用php把图片合成视频,图片音乐合成视频 多张图片合成视频|图片合成视频软件...

在网络上我们经常见到的电子相册其本质就是图片音乐合成视频&#xff0c;使用一些图片合成视频软件将多张图片合成视频&#xff0c;外加点炫酷的转场特效&#xff0c;so easy的就能完成了。o(*≧▽≦)ツ 想不想知道具体的操作过程&#xff1f;有兴趣的童鞋可以看看下文的~ 这是…

电脑图片合成视频用什么软件?3分钟快速教程,多张图片做成精美视频!

电脑图片合成视频怎么做&#xff1f;图片视频制作用什么软件好&#xff1f;现在大家的照片或图片很多&#xff0c;其实在电脑上把图片做成视频是非常方便的&#xff0c;还能整理好照片&#xff0c;节省空间&#xff0c;图片/照片视频看起来也更加美观。今天直接用数码大师教大家…

当请求类型是octet-stream时,SpringBoot 如何完成文件上传

一、问题背景 这个问题困扰了我一上午&#xff0c;搜索了很多博客&#xff0c;发现网上的springboot都是使用Multipart来接收文件&#xff0c;而客户端使用的是binary&#xff0c;用二进制流来上传文件的&#xff0c;下面记录一下我的解决历程。 二、基础知识 一个请求的参数…

No converter for [class xxx] Content-Type ‘appliction/octet-stream;charset=UTF-8‘ 的解决办法

报错的类&#xff1a;AbstractMessageConverterMethodProcessor 报错的代码块 报错原因 respose在被传入其他的方法后&#xff0c;其content type 被篡改了&#xff0c;导致与request 的content type 不一致导致的 解决方案一&#xff1a;将方法直接return null; 解决方案二&…

vue2后端返回application/octet-stream这个类型的文件,前端实现下载。

描述&#xff1a;调用接口以后&#xff0c;后台返回的数据 前端实现&#xff0c;下载功能。 前端打印res&#xff1a; 那么接口必须加上这个 页面下载&#xff1a; downloadFunc(data) {const date new Date(new Date() 8 * 3600 * 1000).toISOString().replace(/T/g, ).re…