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

article/2025/10/28 19:05:42

一. 什么是深度优先遍历

深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点为新的源点重复上述过程,直至图中所有的顶点均已被访问为止。

深度优先遍历结果是: A B E F C D G H 

    深度优先遍历尽可能优先往深层次进行搜索

二.广度优先遍历

广度优先遍历可定义如下:首先访问出发点v,接着依次访问v的所有邻接点w1、w2......wt,然后依次访问w1、w2......wt邻接的所有未曾访问过的顶点。以此类推,直至图中所有和源点v有路径相通的顶点都已访问到为止。此时从v开始的搜索过程结束。

 

 

广度优先遍历结果是: A B C D E F G H I

广度优先遍历按层次优先搜索最近的结点,一层一层往外搜索。

三. 创建的步骤 

    深度优先遍历创建步骤(Depth First Search)

 1.访问初始节点 v,并标记为已访问

 2.查找结点v的第一个邻接点 w

 3.若w存在   则执行4   若不存在回到第一步 再找 v结点的下一个结点

 4.判断w是否被访问   未访问对w深度优先遍历(即把w当作另一个v ,再进行1 2 3);

 5.查找v 在w 后面是否还有下一个邻接点   再执行步骤3 

  广度优先遍历步骤

(需要用到队列来实现对 顺序的访问他的所有邻接点)

 1.访问初始节点 v,并标记为已访问

 2.结点v 入队列

 3.当队列非空时 继续执行,否则结束

 4. 出队列 ,取得头结点u

 5. 查找结点u 的第一个邻接点w

6. 若结点u 邻接点不存在 则执行 步骤3 否则循环执行以下三个步骤

      6.1. 若结点w 未被访问 则访问节点w 并标记为已访问

      6.2 结点w 入队

      6.3 查找结点u的 除了w 之后的下一个其他邻接点

四. 代码实现

//深度优先遍历public void dfs(boolean [] isVisied,int i) {//传入是否被访问的数组  ,和第几个邻接点 System.out.printf(getVertexInf(i)+"-->");isVisied[i]=true;//查找i节点的第一个邻接点int f = getFirstNeighbor(i);while(f!=-1) {//表示第一个邻接点存在//判断是否被访问if(!isVisied[f]) {dfs(isVisied, f);} //这个i 的下一个邻接点已经被访问了,再找这个节点的下一个结点f= getNextNeighbor(i,f);}}//对每个节点遍历//当一个节点访问完后 还有其他未访问的,利用循环 遍历所有的结点public void DFS() {isVisited= new boolean[getNumOfV()];for(int i=0;i<vertexList.size();i++){if(!isVisited[i]) {dfs(isVisited,i);}}}

 

//广度优先遍历   对第i个结点遍历  利用队列来实现public void bfs(boolean [] isVisied,int i) {int u;  //表示队列的第一个元素int w ;  //表示这个节点的邻接点LinkedList queue = new LinkedList(); //创建出队列//调用这个方法就意味着 满足条件可以输出System.out.printf(getVertexInf(i)+"==>");//把这个结点置为i访问isVisied[i]=true;//将节点加入 到队列中queue.addLast(i);  //在队尾添加元素//循环判断队列是否还有元素while(!queue.isEmpty()) {//给第一个元素出队列u = (int) queue.removeFirst();//找这个元素的邻接点w = getFirstNeighbor(u);while(w!=-1) {//找到邻接点if(!isVisied[w]) {//判断是否已访问System.out.printf(getVertexInf(w)+"==>");//把这个结点置为i访问isVisied[w]=true;//将节点加入 到队列中queue.addLast(w);  //在队尾添加元素}//继续寻找下一个  广度的w = getNextNeighbor(u, w);}}}//对每个节点遍历public void BFS() {isVisited= new boolean[getNumOfV()];for(int i=0;i<vertexList.size();i++){if(!isVisited[i]) {bfs(isVisited,i);}}}

五. 结果展示

 


http://chatgpt.dhexx.cn/article/70bmQUSm.shtml

相关文章

图的遍历

图的遍历 介绍 是从图的某一顶点出发&#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…

处理Nginx返回octet-stream数据流的配置

解决 修改Nginx的配置将add_header Content-length 0&#xff1b;删除&#xff0c;处理 Content-Type为application/octet-stream 一、请求报文 二、异常信息 对应前端页面的异常信息为&#xff1a; Network Error epoll_wait() reported that client prematurely closed c…