【数据结构】图的深度优先遍历

一.图的遍历

图的遍历需要解决的关键问题

1.在图中,如何选取遍历的起始顶点?

从编号小的顶点开始

  • 在线性表中,数据元素在表中的编号就是元素在序列中的位置,因而其编号是唯一的。
  • 在树中,将节点按层序编号,由于树具有层次性,因而其层序编号也是唯一的。
  • 在图中,任何两个顶点之间都可能存在边,顶点时没有确定的先后次序的,所以,顶点的编号不唯一。

为了定义操作的方便,将图中的顶点安任意顺序排列起来,比如,按顶点的存储顺序。 

2.从某个起始点可能到达不了所有其它顶点,怎么办?

多次调用从某顶点出发遍历图的算法

3.因图中可能存在回路,某些顶点可能会被重复访问,那么如何避免不会因回路而陷入死循环呢?

附设访问标志数组visited[n] (n为结点个数)

4.在图中,一个顶点可以和其它多个顶点相连,当这样的顶点访问过后,如何选取下一个要访问的顶点呢?

  • 深度优先遍历
  • 广度优先遍历

二.深度优先遍历

1.基本思想

1)访问顶点v;

2)从v的未被访问的邻接点中选取一个顶点w,从w出发进行深度优先遍历;

3)重复上述两步,直至图中所有和v有路径相通的顶点都被访问到。

2.伪代码

  • 1.访问顶点v;visited[v]=1;
  • 2.w=顶点v的第一个邻接点;
  • 3.while(w存在)
  • 3.1 if(w未被访问)从顶点w出发递归执行该算法;
  • 3.2w=顶点v的下一个邻接点;

3.代码实现

3.1 邻接矩阵

template<class T>
void MGraph<T>::DFSTraverse(int v){bool visited[vertexNum]=false;//设置标志数组int w,i,count=0;cout<<vertex[v]<<endl;//访问顶点vvisited[v]=true;//标志数组置为true++count;//结点访问一次,计数器加一for(i=0;i<vertexNum;i++){if(arc[v][i]&&!visited[i]){//存在边且未被访问过w=i;//更新w的值DFSTraverse(w);//再次深度优先搜索w}if(count==vertexNum){//所有结点都被访问过,返回,减少执行次数return;}}}

3.2 邻接表

template <class T>
void ALGraph<T>::DFSTraverse(int v){int w,i=0,count=0;bool visited[vertexNum]=false;struct ArcNode *p=adjList[v].firstEdge;cout<<adjList[v].vertex<<endl;//访问节点vvisited[v]=true;//标志数组置为true++count;if(count==vertexNum){return;}while(p){if(!visited[p->adjvex]){w=p->adjvex;DFSTraverse(w);}else{p=p->next;}}
}

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

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

相关文章

亚马逊运营一定要用动/静态住宅IP代理吗?

作为全球最大的电商平台之一&#xff0c;亚马逊已经成为许多商家的首选销售平台。而代理IP作为近几天互联网的热门工具&#xff0c;在跨境电商界也起着非常强大的作用。那么在亚马逊运营中&#xff0c;适合动态住宅代理还是静态住宅代理呢&#xff1f;下面我们一起来探索&#…

猫罐头牌子哪个好一点?精选5款口碑好的猫罐头推荐!

猫罐头牌子哪个好一点&#xff1f;选择猫罐头是十分重要的事情&#xff0c;千万不能将就。因为&#xff0c;好的猫罐头不仅可以营养丰富&#xff0c;水分充足&#xff0c;适口性好&#xff0c;还能易吸收。而一旦选择错误&#xff0c;不仅无法达到上述效果&#xff0c;还可能产…

代码随想录算法训练营第28天|93.复原IP地址 78.子集 90.子集II

JAVA代码编写 93 .复原IP地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&…

android查漏补缺(8)Android广播不同种类介绍

按照是否有序分类 1&#xff0c;普通广播&#xff08;无序广播&#xff09; 广播按照逻辑上同一时刻&#xff08;实际可能被CPU按照抢占式任务无序发给注册模块&#xff09;发送给注册模块 #发送方法&#xff1a; Context.sendBroadcast() 2&#xff0c;有序广播 广播按照…

申银万国期货通过ZStack Cube信创超融合一体机打造金融信创平台

信创是数字中国建设的重要组成部分&#xff0c;也是数字经济发展的关键推动力量。作为云基础软件企业&#xff0c;云轴科技ZStack产品矩阵全面覆盖数据中心云基础设施&#xff0c;ZStack信创云首批通过可信云《一云多芯IaaS平台能力要求》先进级&#xff0c;是其中唯一兼容四种…

基于单片机仓库温湿度监测报警系统仿真设计

**单片机设计介绍&#xff0c;基于单片机仓库温湿度监测报警系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的仓库温湿度监测报警系统可以被设计成能够实时监测仓库内的温度和湿度&#xff0c;并根据预设…

ssm青少年航天知识科普网站-计算机毕设 附源码59487

青少年航天知识科普网站 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&am…

嵌入式Linux学习(1)——经典CAN介绍(上)

目录 一. CAN与ISO-OSI Model 二. CAN通信 2.1 接线方式 2.1.1 闭环网络 2.1.2 开环网络 2.2 收发流程 2.2.1 发送 2.2.2 接收 三. CAN BUS访问与仲裁 3.1 “线与”机制​ 3.2 仲裁机制 REF CAN&#xff08;Controller Area Network&#xff09;总线协议是由 BOSC…

路线规划问题

文章目录 1、问题描述2、节点类设置3、设置节点之间的关系4、路线规划5、完整类6、结果7、优化 1、问题描述 如下图&#xff0c;存在A~F六个地点&#xff0c;已知所有地点的相关关系&#xff08;每个地点能到达的下一节点名称以及对应的路程&#xff09;&#xff1b; 计算某个…

Vue 中简易封装网络请求(Axios),包含请求拦截器和响应拦截器

Vue 中简易封装网络请求&#xff08;Axios&#xff09;&#xff0c;包含请求拦截器和响应拦截器 axios简介 Axios 是一个基于 promise 的网络请求库&#xff0c;可以用于浏览器和 node.js Axios官方中文文档 特性 从浏览器创建 XMLHttpRequests从 node.js 创建 http 请求支…

OpenStack-train版安装之环境准备

环境准备 环境介绍VMware配置WMware虚拟机最低配置WMware添加网卡WMware添加硬盘 基础环境安装修改各节点的主机名修改各节点的hosts文件修改各节点的内核参数关闭各节点的防火墙和selinux安装NPT&#xff08;时间同步&#xff09;安装OpenStack基础服务包 CentOS升级内核 环境…

手把手设计C语言版循环队列(力扣622:设计循环队列)

文章目录 前言描述分析力扣AC代码 力扣&#xff1a; 622.设计循环队列 前言 队列会出现“假溢出”现象&#xff0c;即队列的空间有限&#xff0c;队列是在头和尾进行操作的&#xff0c;当元素个数已经达到最大个数时&#xff0c;队尾已经在空间的最后面了&#xff0c;但是对头…

深入理解MySQL存储引擎、InnoDB与MyISAM的比较以及事务处理机制

介绍 MySQL是一款强大而灵活的关系型数据库管理系统&#xff0c;它支持多种存储引擎&#xff0c;每个引擎都有其独特的特点和适用场景。在本篇博客中&#xff0c;我们将深入探讨MySQL存储引擎的种类、InnoDB与MyISAM的区别&#xff0c;以及事务的概念及其在MySQL中的实现方式。…

枚举 小蓝的漆房

题目 思路 核心思想是枚举 首先利用set记录每一种颜色 然后依次从set取出一种颜色作为targetColor&#xff0c;遍历房子 如果当前房子的颜色和targetColor不相同&#xff0c;就以当前房子为起点&#xff0c;往后长度为k的区间都涂成targetColor&#xff0c;并且需要的天数递增…

java算法学习索引之链表问题

0 相关类 public class Link {class NewNode {public int value;public NewNode next;public NewNode rand;public NewNode(int value, NewNode next, NewNode rand) {this.value value;this.next next;this.rand rand;}public NewNode(int value) {this.value value;}}cl…

【云原生-Kurbernetes篇】HPA 与 Rancher管理工具

文章目录 一、Pod的自动伸缩1.1 HPA1.1.1 简介1.1.2 HPA的实现原理1.1.3 相关命令 1.2 VPA1.2.1 简介1.2.2 VPA的组件1.2.3 VPA工作原理 1.3 metrics-server简介 二、 HPA的部署与测试2.1 部署metrics-serverStep1 编写metrics-server的配置清单文件Step2 部署Step3 测试kubect…

Flink Operator 使用指南 之 Flink Operator安装

介绍 Flink Kubernetes Operator 充当控制平面来管理 Apache Flink 应用程序的完整部署生命周期。尽管 Flink 的Native Kubernetes 集成已经允许用户在运行的 Kubernetes(k8s) 集群上直接部署 Flink 应用程序,但自定义资源和Operator Pattern 也已成为 Kubernetes 原生部署体…

Mrakdown Nice:格式

标题 缩进 删除线 斜体 加粗

动手学深度学习(三)---Softmax回归

文章目录 一、理论知识 softmax回归 一、理论知识 回归估计一个连续值分类预测一个离散类别 回归单连续数值输出自然区间R跟真实值的区别作为损失 分类通常多个输出输出i是预测为第i类的置信度 一般我们使用交叉熵用来衡量两个概率的区别 将它作为损失 其梯度是真实概率和…

STM32笔记

GPIO GPIOB->BSRR | GPIO_PIN_7 在STM32F103中&#xff0c;GPIOB->BSRR | GPIO_PIN_7 的作用是将GPIOB的第7位引脚设置为高电平&#xff08;将引脚置1&#xff09;&#xff0c;而GPIOB->BRR | GPIO_PIN_7 的作用是将GPIOB的第7位引脚设置为低电平&#xff08;将引脚置…