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

一、什么是“图”(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解析&…

python的指针跟c的区别_ctypes中的LP_x*指针和*p指针有什么区别?(以及与结构的奇怪交互)...

我很难理解Python ctypes中LP_*(例如LP_c_char)和*\u p(例如c_char_p)指针之间的区别。是否有文件区分它们?在我所读到的关于*\p指针的一些信息表明它们更好(以某种未指明的方式),但是当我试图将它们用作结构字段时,我会得到奇怪的行为。例如…

爱斯基摩结构

“爱斯基摩结构”:狗拉雪橇是生活在北极圈的爱斯基摩人最重要的运载工具。怎样才能让狗多拉快跑?爱斯基摩人将狗分成两个层次,前面是一只领狗,后头有N只力狗。他们给领狗制造许多特权:它单独享用食品&#…

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

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

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…

字符指针与字符串变量的转换

VC.NET中的String类是利用Unicode字符集编码来表示文本。Unicode字符集中每个字符(汉字、英文字母)都占2个字节,且其字符串是以2个连续的/0结尾的。 ANSI的ASCII字符集是最常见的字符集,常用于表示txt的文本文件。在ASCII字符集中英文占一个字节&#…

直方图均衡 视觉显著_视觉图像:对比度受限直方图均衡化CLAHE

CLAHE源码解析:ContrastLimitAHE .h:#ifndef _CONTRAST_LIMIT_AHE_H_#define _CONTRAST_LIMIT_AHE_H_#include "stdafx.h"#include using namespace std;class ContrastLimitAHE{public:ContrastLimitAHE();~ContrastLimitAHE();int m_nGridX;…

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…

一个使用指针的简单程序

一个使用指针的简单程序 /*一个使用指针的简单程序*/ #include <stdio.h> void main(){ int number 0; //一个出初始化为0的整形变量 int *pointer NULL; //一个可以指向int类型的指针 number 10; printf("\nnumber的地址为:%p",&number); //输出地址…

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

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

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

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

Linux 下用C语言连接 sqlite

1.在 /home/ 新建一个文件夹名为 sqlite #cd /home #mkdir sqlite 2.编写C语言代码&#xff0c;名称为 sql.c&#xff0c;代码如下 // name&#xff1a; sql.c // This prog is used to test C/C API for sqlite3.It is very simple,ha! // Author : zieckey All rights rese…

c2c旅游springboot开源_重量级开源的商城和SpringBoot等项目看看有没有正好是你需要的...

1. JavaGuideGithub地址&#xff1a; 同下star: 18.2k介绍: 【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。2. mallGithub地址&#xff1a; 同下star: 3.3k介绍: mall项目是一套电商系统&#xff0c;包括前台商城系统及后台管理系统&#xff0c;基于Sp…

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

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

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

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

几个功能强大的系统源码(机票分销、机票预订、OA、手机充值、wifi营销、网络超市、体检平台)...

1、机票分销、机票预订系统源码 2、OA系统源码 3、手机在线充值系统源码 4、wifi营销系统源码 5、网络超市系统源码 6、在线体检平台系统源码 7、违章查询与缴费系统源码 需要的同学请联系QQ:930948049转载于:https://www.cnblogs.com/bcxz/p/3993157.html

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

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