无向图的深度优先遍历非递归_【数据结构图(一)】什么是图

一、什么是“图”(Graph) 

  • 表示“多对多”的关系

  • 包含

    •  一组顶点:通常用 V (Vertex) 表示顶点集合

    • 一组边:通常用 E (Edge) 表示边的集合

      • 无向边:(v, w) 

      • 有向边:

      • 不考虑重边和自回路

二、抽象数据类型定义

  • 类型名称:图(Graph)

  • 数据对象集:G(V,E)由一个非空的有限顶点集合V和一个有限边集合E组成。

  • 操作集:

Graph Create();//建立并返回空图;Graph InsertVertex(Graph G, Vertex v);//将v插入G;Graph InsertEdge(Graph G, Edge e);//将e插入G;void DFS(Graph G, Vertex v);//从顶点v出发深度优先遍历图G;void BFS(Graph G, Vertex v);//从顶点v出发宽度优先遍历图G;void ShortestPath(Graph G, Vertex v, int Dist[]);//计算图G中顶点v到任意其他顶点的最短距离;void MST(Graph G);//计算图G的最小生成树;

b9a61e4f7a1dd3e478a3b2f39a7f1a3e.png

三、邻接矩阵 

  1. 邻接矩阵G[N][N]——N个顶点从0到N-1编号,若存在边,则 G[i][j] = 1,否则为0。

65dc789ab11bfa5911924bbb151feaca.png

  1. 对于无向图的存储,怎样可以省一半空间?

  2. 邻接矩阵
    用一个长度为N(N+1)/2的1维数组A存储{G00,G10,G11,……,Gn-1,0,…,Gn-1 n-1},则Gij在A中对应的下标是:( i*(i+1)/2 + j )对于网络,只要把G[i][j]的值定义为边j>的权重即可。

eb2ee1182e8109638f4019d9425addae.png

  1. 如,若查看是否有v6到v3的边,则查看G[6*7/2 + 3] = G[24]即可。

四、邻接矩阵性质

    优点:邻接矩阵 —— 有什么好处?

  • 直观、简单、好理解

  • 方便检查任意一对顶点间是否存在边

  • 方便找任一顶点的所有“邻接点”(有边直接相连的顶点)

  • 方便计算任一顶点的“度”(从该点发出的边数为“出度”,指向该点的边数为“入度”)

    • 无向图:对应行(或列)非0元素的个数

    • 有向图:对应行非0元素的个数是“出度”;对应列非0元素的个数是“入度”

    缺点:邻接矩阵 —— 有什么不好?

  • 浪费空间 —— 存稀疏图(点很多而边很少)有大量无效元素。(对稠密图,特别是完全图,还是很合算的)

  • 浪费时间 —— 统计稀疏图中一共有多少条边

五、邻接表

    G[N]为指针数组,对应矩阵每行一个链表,只存非0元素 。

295d6d57e3134b6cd3f5069b4f6461ea.png

六、邻接表性质

  • 方便找任一顶点的所有“邻接点”

  • 节约稀疏图的空间

    • 需要N个头指针 + 2E个结点(每个结点至少2个域)

  • 方便计算任一顶点的“度”?

    • 对无向图:是的

    • 对有向图:只能计算“出度”;需要构造“逆邻接表”(存指向自己的边)来方便计算“入度”

  • 方便检查任意一对顶点间是否存在边?

    • No

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

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

相关文章

LeetCode 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的正整数数组 candiesCount ,其中 candiesCount[i] 表示你拥有的第 i 类糖果的数目。 同时给你一个二维数组 queries ,其中 queries[i] [favoriteTypei, favoriteDayi, dailyCapi] 。 你按照如下…

wdcp-apache开启KeepAlive提高响应速度

因为我们的网站,媒体文件,js文件,css文件等都在同一个服务器上,并且,我们网站有非常多的图片,所以当建立好tcp链接之后,不应该马上关闭连接,因为每建立一次连接还要进行dns解析&…

如何将网页保存为图片_网页账号密码该如何保存?

我们在使用浏览器浏览一些网页的时候,需要输入我们的账号密码才能登陆,以保证安全。但是有时候浏览网页,不小心关掉了,重新打开时又要重新输入密码,这样会显得很繁琐。那么有什么办法能让网页记住我们的账号密码吗&…

scala学习-类与对象

类  /  对象 【《快学Scala》笔记】 一、类 1、Scala中的类是公有可见性的,且多个类可以包含在同一个源文件中; 1 class Counter{ 2 private var value 0  //类成员变量必须初始化,否则报错 3 4 def increment(){ //类中的…

LeetCode 1745. 回文串分割 IV(区间DP)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s ,如果可以将它分割成三个 非空 回文子字符串,那么返回 true ,否则返回 false 。 当一个字符串正着读和反着读是一模一样的,就称其为 回文字符串 。 示例 1: 输入&a…

5000并发的qps是多少_高并发架构设计

点击蓝字,关注我们01概述高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。高并发一方面可以提高资源利用率,加快系统响应速度,但是同…

TensorFlow 2.0 - tf.data.Dataset 数据预处理 猫狗分类

文章目录1 tf.data.Dataset.from_tensor_slices() 数据集建立2. Dataset.map(f) 数据集预处理3. Dataset.prefetch() 并行处理4. for 循环获取数据5. 例子: 猫狗分类学习于:简单粗暴 TensorFlow 2 1 tf.data.Dataset.from_tensor_slices() 数据集建立 tf.data.Dat…

flutter 图解_【Flutter 专题】83 图解自定义 ACEWave 波浪 Widget (一)

和尚今天尝试一下绘制波浪的效果,虽然 pub 仓库中已经有成熟的插件,但和尚还是准备用之前学习的 Canvas 和 Animation 尝试自定义一个 ACEWave;1. 绘制曲线绘制波浪首先需要绘制曲线,采用 Canvas 绘制贝塞尔曲线;常用的…

c++ 不插入重复元素但也不排序_面试时写不出排序算法?看这篇就够了

小Hub领读:本文主要详细讲述常见的八种排序算法的思想、实现以及复杂度。包括冒泡排序、快速排序、插入排序、希尔排序等等,文章讲解非常详细!作者:静默虚空https://juejin.im/post/5cb6b8f551882532c334bcf2本文已归档到&#xf…

LintCode 1816. 使结果不超过阈值的最小除数(二分查找)

文章目录1. 题目2. 解题1. 题目 描述 给你一个整数数组 nums 和一个正整数 threshold ,你需要选择一个正整数作为除数,然后将数组里每个数都除以它,并对除法结果求和。 请你找出能够使上述结果小于等于阈值 threshold 的除数中 最小 的那个…

马里兰大学calce电池循环测试数据集_千次循环,全程1.5V恒压,紫米新一代充电锂电池套装上手体验...

电池应该是每个家庭都会用到的东西,在现在智能家电飞迅发展的当下更是如此,比如智能门锁、智能门铃,都需要电池的供电,才能正常使用。而普通碱电池在电量耗尽后就无法循环使用,所以为了能节省成本减少电池对环境的污染…

TensorFlow 2.0 - TFRecord存储数据集、@tf.function图执行模式、tf.TensorArray、tf.config分配GPU

文章目录1. TFRecord 格式存储2. tf.function 高性能3. tf.TensorArray 支持计算图特性4. tf.config 分配GPU学习于:简单粗暴 TensorFlow 2 1. TFRecord 格式存储 使用该种格式,更高效地进行大规模的模型训练 import random import os import tensorfl…

c++ qt qlistwidget清空_Qt编写控件属性设计器12-用户属性

一、前言用户属性是后面新增加的一个功能,自定义控件如果采用的Q_PROPERTY修饰的属性,会自动识别到属性栏中,这个一般称为控件属性,在组态设计软件中,光有控件本身的控件属性还是不够的,毕竟这些属性仅仅是…

TensorFlow 2.0 - tf.saved_model.save 模型导出

文章目录1. tf.saved_model.save2. Keras API 模型导出学习于:简单粗暴 TensorFlow 2 1. tf.saved_model.save tf.train.Checkpoint 可以保存和恢复模型中参数的权值导出模型:包含参数的权值,计算图 无须源码即可再次运行模型,适…

机器人动力学与控制_力控制与位置控制的区别

1.背景介绍目前已经广泛落地的力控制方案是在机械臂末端安装多轴力矩传感器,用以检测机械臂对外界环境施加的力反馈值,并配合适当的控制策略,已达到控制机械臂与环境的作用力。这篇文章所要探讨的力控制(上述力控制方案&#xff0…

基坑监测日报模板_基坑监测有多重要?实录基坑坍塌过程,不亲身经历,不知道现场有多恐怖!...

基坑整体坍塌不亲身经历,不知其恐怖▼前段时间,南宁绿地中央广场房地产项目D号地块(二期)基坑北侧约60米支护桩突然崩塌!所幸无人伤亡。深基坑施工安全生产管理要点一、基坑开挖 1、 临边防护(1)基坑施工必须按要求进行,具体临边防…

[转]asp.net导出数据到Excel的三种方法

原文出处:asp.net导出数据到Excel的几种方法(1/3) 、asp.net导出数据到Excel的几种方法(2/3)、asp.net导出数据到Excel的几种方法(3/3) asp.net导出到Excel也是个老生常谈的问题,在此归纳一下。 第一种是比较常用的方法。是利用控件的RenderControl功能…

LintCode 378. 将二叉树转换成双链表(非递归遍历)

文章目录1. 题目2. 解题1. 题目 将一个二叉树按照中序遍历转换成双向链表。 样例 样例 1&#xff1a; 输入:4/ \2 5/ \1 3 输出: 1<->2<->3<->4<->5样例 2&#xff1a; 输入:3/ \4 1输出:4<->3<->1https://www.lintcode.com/pro…

js 将图片置灰_艾叶灰千万别扔——艾叶灰的神奇功效

请 点 上面“经络技巧”免费关注每晚9点准时免费更新点击下面图片阅读↓↓↓—— 以下是正文 ——艾灰的妙用1、宝宝经常会有红屁股&#xff0c;做妈妈的当然心疼&#xff0c;用了不少膏啊霜啊油啊&#xff0c;效果也是反反复复&#xff0c;尤其害怕会有依赖性。在妈妈的提醒下…

LintCode 434. 岛屿的个数II(并查集)

文章目录1. 题目2. 解题1. 题目 给定 n, m, 分别代表一个二维矩阵的行数和列数, 并给定一个大小为 k 的二元数组A. 初始二维矩阵全0. 二元数组A内的k个元素代表k次操作, 设第 i 个元素为 (A[i].x, A[i].y), 表示把二维矩阵中下标为A[i].x行A[i].y列的元素由海洋变为岛屿. 问在…