C语言 图的基础知识

  • 图的基本概念
  • 图的存储方法
    • **邻接矩阵**:
    • 邻接表
  • 图的遍历
    • 深度优先(DFS)
    • 广度优先(BFS)
  • 最小生成树
    • Prim算法
    • Kruskal算法
  • 最短路径问题

图的基本概念

图的定义
图是由顶点的非空有穷集合顶点之间关系(边或弧)的集合构成的结构,通常表示为:G=(V,E),其中V为顶点集合,E为关系(边或弧)的集合。

图的分类
无向图:对于(vi,vj)∈E,必有(vj,vi)∈ E,并且偶对中顶点的前后顺序无关。
有向图:<vi,vj>∈E是顶点的有序偶对。
网:与边有关的数据称为权,边上带权的图称为网。
在这里插入图片描述顶点的度
依附于顶点Vi的边的数目,称为TD(i);
对于有向图而言:
顶点的出度:以顶点vi为出发点的边的数目:记为OD(vi);
顶点的入度:以顶点vi为终止点的边的数目,记为ID(vi);
TD(vi)=OD(vi)+ID(vi);

顶点和边关系
①具有n个顶点的无向图最多有n(n-1)/ 2 条边。
②具有n个顶点的有向图最多有n(n-1)条边。
边的数目达到最大的图称为完全图,边的数目达到或接近最大的图称为稠密图,否则,称为稀疏图

路径和路径长度
顶点vx和vy之间有路径P(vx,vy)的充分必要条件是:存在顶点序列vx,vi1,vi2,……,vim,vy,并且序列中相邻两个顶点构成的顶点偶对分别为图中的一条边。
在这里插入图片描述出发点与终止点相同的路径称为回路
顶点序列中顶点不重复出现的路径称为简单路径
不带权的图的路径长度是指路径上所经过的边的数目,带权图的路径长度是指路径上经过的边上的权值之和。

子图
如下图所示,G1’和G2’就是G的子图。
在这里插入图片描述无向图的连通
无向图中顶点vi到vj有路径,则称顶点vi和vj是连通的。若无向图中任意两个顶点都有连通,则称该无向图是连通的(称为连通图)。
连通分量:无向图中的极大连通子图。
在这里插入图片描述

有向图的连通:若有向图中顶点vi到vj有路径,并且顶点vj到vi也有路径,则称顶点vi与vj是连通的。若有向图中任意两个顶点都连通,则称该有向图是强连通的。
强连通分量:有向图中的极大强连通子图。
在这里插入图片描述生成树:包含n个顶点和n-1条边的极小连通子图称为G的一个生成树。

在这里插入图片描述
生成树的性质
1.包含n个顶点的图:连通且仅有n-1条边

=无回路且仅有n-1条边

=无回路且连通

=是一棵树
2.如果n个顶点的图中只要有少于n-1条边,图将不连通
3.如果n个顶点的图中有多于n-1条边,图将有环(回路)
4.一般,生成树不唯一。

图的存储方法

因为期末考试不考图的编程题,所以这里简单介绍一下即可:

邻接矩阵

核心思想 :采用两个数组存储一个图。

  1. 定义一个一维数组VERTEX【0……n-1】存放图中所有顶点的数据信息。
  2. 定义一个二维数组A【0……n-1,0……n-1】存放图中所有顶点之间关系的信息(即邻接矩阵)
    在这里插入图片描述
    例如:
    在这里插入图片描述邻接矩阵特点

①无向图的邻接矩阵一定是一个对称矩阵
②不带权的有向图的邻接矩阵一般是稀疏矩阵。
③无向图的邻接矩阵的第i行(或第i列)非0或非∞元素的个数为第 i个顶点的数。
④有向图的邻接矩阵的第i行非0或非∞元素的个数为第i个顶点的出度;第i列非0或非∞元素的个数为第i个顶点的入度

邻接表

核心思想:建立n个线性链表存储该图
顶点结点:每个链表前面设置一个头结点,用来存放一个顶点的数据信息,称之为顶点节点。其构造为在这里插入图片描述其中,vertex存放某个顶点的数据信息;link存放某个链表中第一个结点的地址。

边结点:第i个链表中的每一个链结点(边结点)表示以第i个顶点为出发点的一条边,边结点构造为:在这里插入图片描述weight域为权值域(若图不带权,则无此域);
adjvex域存放以第i个顶点为出发点的边的另一端点在头结点数组中的位置。
在这里插入图片描述
特点
①无向图的第i个链表中边结点个数是第i个顶点的度数

②有向图的第i个链表中边结点个数是第i个顶点的出度

③无向图的边结点个数一定为偶数,边结点个数为奇数的图一定是有向图。

图的遍历

深度优先(DFS)

直接上个图就行了:
在这里插入图片描述

为了区分哪些顶点被访问过,哪些没被访问,可以设置一个数组visit,visit[i]=0,表示没有被访问过,visit[i]=1,已经被访问过。

算法分析
若采用邻接表存储该图,则时间复杂度为O(n+e)。
若采用邻接矩阵存储,则时间复杂度为O(n²)

广度优先(BFS)

类似于树的层序遍历。
在这里插入图片描述
时间复杂度和空间复杂度同DFS。

最小生成树

带权连通图中,总的权值之和最小的带权生成树为 最小生成树 。最小生成树也称最小代价生成树,或最小花费生成树。

Prim算法

设G=(V,GE)为具有n个顶点的带权连通图,T=(U,TE)为生成的最小生成树,初始时,TE为空,U={v},v∈V。
依次在G中选择一条一个顶点仅在V中另一个顶点在U中,并且权值最小的边加入集合TE,同时将该边仅在V中的那个顶点加入集合U。重复上述过程n-1次,是的U=V,此时T为G的最小生成树。
在这里插入图片描述

Kruskal算法

从G中选一条当前为选择过的,且边上的权值最小的边加入TE,若加入TE后使得T未产生回路,则本次选择有效,如使得T产生回路,则本次选择无效,放弃本次选择的边。重复上述选择过程直到TE中包含了G的n-1条边,此时的T为G的最小生成树。
在这里插入图片描述

最短路径问题

Dijkstra算法(单源点问题)
1.图的存储
以0~1分别代表n个顶点,采用邻接矩阵存储该图,有
在这里插入图片描述
2.几个必要的数组设置
①设置一个标志数组s[0……n-1]记录源点v到图中哪些顶点的最短路径已经找到。有:
在这里插入图片描述
②设置数组dist[0……n-1]分别记录源点v到图中各顶点的最短路径的路径长度,其中,dist[i]记录源点到顶点i的最短路径长度。初始时,dist数组的值为邻接矩阵第v行的n个元素值。
③设置数组path[0……n-1]分别记录源点v到图中各顶点的最短路径所经过的顶点序列,其中,path[i]记录源点到顶点i的路径。

自然语言表达:
在这里插入图片描述
其中,初值为:
在这里插入图片描述
v为原点。

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

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

相关文章

傅里叶级数在不连续点会怎么样???

文章目录 一、前言背景二、用狄利克雷核表达傅里叶级数三、狄利克雷核与狄拉克函数四、傅里叶级数在不连续点的表示五、吉伯斯现象的解释六、总结参考资料 一、前言背景 笔者最近在撸《信号与系统》&#xff0c;写下此博客用作记录和分享学习笔记。由于是笔者为电子爱好者&…

vuejs3+elementPlus后台管理系统,左侧菜单栏制作,跳转、默认激活菜单

默认激活菜单,效果&#xff1a; 默认激活菜单&#xff0c;效果1&#xff1a; 默认激活菜单&#xff0c;效果2&#xff1a; 跳转链接效果&#xff1a; 制作&#xff1a; <script setup> import {useUserStore} from "/stores/userStore.js"; import {ref} fr…

实验2:RIPv2的配置

由于RIPv1是有类别的路由协议,路由更新不携带子网信息,不支持不连续子网、VLSM、手工汇总和验证等&#xff0c;本书重点讨论RIPv2。 1、实验目的 通过本实验可以掌握&#xff1a; RIPv1和 RIPv2的区别。在路由器上启动RIPv2路由进程。激活参与RIPv2路由协议的接口。auto-sum…

Mybatis Plus 详解 IService、BaseMapper、自动填充、分页查询功能

结构直接看目录 前言 MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 愿景 我们的愿景是成为 MyBatis 最好的搭档&#xff0c;就像 魂斗罗 中的 1P、2P&#xff0c;基友搭配&#xff0c;效…

租房项目之并发缺失数据问题

前奏&#xff1a;本项目是一个基于django的租房信息获取项目。本次博客牵扯到两个版本&#xff0c;集中式分布以及分布式部署&#xff08;两个版本的ui不同&#xff0c;集中式用的是老版ui&#xff0c;分布式使用的是新版ui&#xff09;&#xff1b; 项目链接&#xff1a;http…

审稿人:拜托,请把模型时间序列去趋势!!

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 时间序列分析是数据科学中一个重要的领域。通过对时间序列数据的分析&#xff0c;我们可以从数据中发现规律、预测未来趋势以及做出决策…

全网最全postman接口测试教程和项目实战~从入门到精通

Postman实现接口测试内容大纲一览&#xff1a; 一、什么是接口&#xff1f;为什么需要接口&#xff1f; 接口指的是实体或者软件提供给外界的一种服务。 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改。从而使得内部和外部实现数据交互。所以需要接口。 比如&…

php配合fiddler批量下载淘宝天猫商品数据分享

有个做电商的朋友问我&#xff0c;每次上款&#xff0c;需要手动去某宝去搬运商品图片视频&#xff0c;问我能不能帮忙写个脚本&#xff0c;朋友开口了&#xff0c;那就尝试一下 首先打开某宝&#xff0c;访问一款商品&#xff0c;找出他的数据来源 通过观察我们发现主图数据来…

下载elasticsearch-7.10.2教程

1、ES官网下载地址 Elasticsearch&#xff1a;官方分布式搜索和分析引擎 | Elastic 2、点击下载Elasticsearch 3、点击 View past releases&#xff0c;查看过去的版本 4、选择版本 Elasticsearch 7.10.2&#xff0c;点击 Download&#xff0c;进入下载详情 5、点击 LINUX X8…

23种设计模式之桥接模式

桥接模式 1、定义 桥接模式&#xff1a;将抽象部分与它的实现部分解耦&#xff0c;使得两者都能独立变化 2、桥接模式结构 Abstraction&#xff08;抽象类&#xff09;&#xff1a;它是用于定义抽象类的&#xff0c;通常是抽象类而不是接口&#xff0c;其中定义了一个Imple…

信息学奥赛初赛天天练-30CSP-J2022完善程序-结构体构造函数初始化、auto关键字、连通块、洪水填充算法实战

PDF文档公众号回复关键字:20240620 2022 CSP-J 阅读程序2 完善程序 (单选题 &#xff0c;每小题3分&#xff0c;共30分) 2 (洪水填充) 现有用字符标记像素颜色的8 * 8图像。颜色填充操作描述如下&#xff1a;给定起始像素的位置和待填充的颜色&#xff0c;将起始像素和所有可…

【数学建模】——【新手小白到国奖选手】——【学习路线】

专栏&#xff1a;数学建模学习笔记 目录 ​编辑 第一阶段&#xff1a;基础知识和工具 1.Python基础 1.学习内容 1.基本语法 2.函数和模块 3.面向对象编程 4.文件操作 2.推荐资源 书籍&#xff1a; 在线课程&#xff1a; 在线教程&#xff1a; 2.数学基础 1.学习内…

Day01 数据结构概述

目录 一、数据结构概述 1、基本概念 2、数据结构 3、逻辑关系&#xff08;线性结构&非线性结构&#xff09; 4、物理结构&#xff08;存储结构&#xff09; 5、算法 6、算法特征 二、时空复杂度 1、时间复杂度 2、空间复杂度 3、结构类型 一、数据结构概述 1、…

计算机网络:网络层 - 虚拟专用网 VPN 网络地址转换 NAT

计算机网络&#xff1a;网络层 - 虚拟专用网 VPN & 网络地址转换 NAT 专用地址与全球地址虚拟专用网 VPN隧道技术 网络地址转换 NAT网络地址与端口号转换 NAPT 专用地址与全球地址 考虑到 IP 地址的紧缺&#xff0c;以及某些主机只需要和本机构内部的其他主机进行通信&…

flutter开发实战-创建一个微光加载效果

flutter开发实战-创建一个微光加载效果 当加载数据的时候&#xff0c;loading是必不可少的。从用户体验&#xff08;UX&#xff09;的角度来看&#xff0c;最重要的是向用户展示加载正在进行。向用户传达数据正在加载的一种流行方法是在与正在加载的内容类型近似的形状上显示带…

算法:分治(归并)题目练习

目录 题目一&#xff1a;排序数组 题目二&#xff1a;数组中的逆序对 题目三&#xff1a;计算右侧小于当前元素的个数 题目四&#xff1a;翻转对 题目一&#xff1a;排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xf…

python 逻辑控制语句、循环语句

文章目录 一、逻辑控制语句&#xff08;if、elif、else&#xff09;1.1 单个条件的逻辑判断语句1.2 多个条件的逻辑判断语句 二、循环语句2.1 while 循环2.2 for 循环2.2.1 循环使用 else 语句 一、逻辑控制语句&#xff08;if、elif、else&#xff09; Python 条件语句是通过一…

el-date-picker 有效时间精确到时分秒 且给有效时间添加标记

el-date-picker实现有效日期做标记且时分秒限制选择范围 代码如下&#xff1a; // html部分 <el-date-pickerv-model"dateTime"type"datetime":picker-options"pickerOptions" > </el-date-picker>// js部分 /*** 回放有效日期开始时…

24年计算机等级考试22个常见问题解答❗

24年9月计算机等级考试即将开始&#xff0c;整理了报名中容易遇到的22个问题&#xff0c;大家对照入座&#xff0c;避免遇到了不知道怎么办&#xff1f; 1、报名条件 2、报名入口 3、考生报名之后后悔了&#xff0c;不想考了&#xff0c;能否退费&#xff1f; 4、最多能够报多少…

Git进阶使用(图文详解)

文章目录 Git概述Git基础指令Git进阶使用一、Git分支1.主干分支2.其他分支2.1创建分支2.2查看分支1. 查看本地分支2. 查看远程分支3. 查看本地和远程分支4. 显示分支的详细信息5. 查看已合并和未合并的分支 2.3切换分支1. 切换到已有的本地分支2. 创建并切换到新分支3. 切换到远…