数据结构基础详解(C语言):图的基本概念_无向图_有向图_子图_生成树_生成森林_完全图

简介: 本文介绍了图的基本概念,包括图的定义、无向图与有向图、简单图与多重图等,并解释了顶点度、路径、连通性等相关术语。此外还讨论了子图、生成树、带权图及几种特殊形态的图,如完全图和树等。通过这些概念,读者可以更好地理解图论的基础知识。

@[TOC]

图的基本概念

1. 图的定义

图由顶点集V和边集E组成,记为G=(V,E).
图中顶点的个数,也称为图G的阶,用|V| 表示图G中顶点的个数, |E|表示图G中边的条数.

注意:
图不可以为空.即图的点集不能为空,图可以没有边,但是有边,边肯定要连接图.

1.1 无向图和有向图

无向图:
E是无向边,边是顶点的无序对,记为(v,w)=(w,v),其中v,w是顶点.

有向图:
E是有向边(也称弧)的有限集合时,则图G为有向图.弧是顶点的有序对,记为,其中v,w是顶点,v称为弧尾,w称为弧头

1.2 简单图和多重图

简单图:
:one: 不存在重复边
:two:不存在顶点到自身的边(无环的意思)
image.png

多重图:
可以存在重复边,可以有环.

2.图的一些术语

2.1 顶点的度,入度,出度

对于无向图,顶点的度是指依附于该顶点边的条数,记为TD(v).

简言之,与顶点接触的边的条数,对一个边来说,他必然会和两条边接触。所以一个无向图中,所有顶点的度之和=2倍的边数。

对于有向图,
入度数以顶点v为终点的有向边的数目,记为ID(v).
出度是以顶点v为起点的有向边的数目,记为OD(v)
顶点的度=其入度和出度之和,即TD(v)=ID(v)+OD(v)

简言之,入度数箭头接触该结点的边数,出度是线尾接触结点的边数

2.2 路径 回路,简单路径,路径长度,点到点的距离

路径:顶点v~p~到顶点~q~之间的一条路径是指顶点序列,v~p~,v~1~,v~2~....v~q~

回路:第一个顶点和最后一个顶点相同的路径叫回路

简单路径:在路径序列中,没有顶点重复的路径。

简单回路:除一个顶点和最后一个顶点外,其余顶点不重复的回路

点到点的距离:从顶点v出发到顶点v的最短路径存在,则称路径的长度为u到v到距离,如果两个顶点之间不存在路径,则记为无穷

2.3 连通图,强联通图

引入基本概念:连通,强连通
连通:无向图中,若从顶点v到顶点w有路径存在,则称v和我是连通的
强连通:有向图中,v到w,w到v之间都有路径,则称这两个顶点是强连通的。

连通图:若图中任意两个顶点都是连通的,则称图G为连通图,否则则称非连通图。

对于n个顶点的无向图G,若G是连通图,则最少有n-1条边。
若G是非连通图,则最少有c^2^~n-1~

强连通图,任何一对顶点都是强连通的图。
强连通图,至少有n条边,形成n条边

3. 图的局部--子图

子图是顶点是图的一部分,顶点之间原先在图中的线可以存在,也可以不存在。但是不是两头都有接触的边,肯定不能存在。

3.1 连通分量,强连通分量

无向图中的极大连通子图称为连通分量。

子图必须连通,且包含尽可能多的顶点和边。

有向图中的极大强连通子图称为有向图的强连通分量。

3.2 生成树

连通图的生成树是包含图中全部顶点的一个极小连通子图。
若图中顶点数为n,则它的生成树含有n-1条边。对生成树而言,若砍去它的一条边,则会变成非连通图,若加上一条边则会形成一个回路。
image.png

3.3 生成森林

在非连通图中,连通分量的生成树构成了非连通图的生成森林。
image.png

3.4 边的权,带权图

边的权--在一个图中国,每条边都可以标上具有某种含义的数值,该数值称为该边的权值
带权图/网 边上带有权值的图为带权图,也称网。
带权路径长度:当图树带权图时,一条路径上所有边的权值之和,称为该路径的带权路径长度。

4. 几种特殊形态的图

4.1 无向完全图和有向完全图

image.png

4.2 树和有向树

树:不存在回路,且连通的无向图。

n个顶点的树,必有n-1条边,若边>n-1,则一定有回路

有向树:一个顶点的入度为0,其余顶点的入度均为1的有向图,称为有向树

相关文章
|
10月前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
406 1
|
10月前
|
存储 算法 搜索推荐
【趣学C语言和数据结构100例】91-95
本文涵盖多个经典算法问题的C语言实现,包括堆排序、归并排序、从长整型变量中提取偶数位数、工人信息排序及无向图是否为树的判断。通过这些问题,读者可以深入了解排序算法、数据处理方法和图论基础知识,提升编程能力和算法理解。
146 4
|
10月前
|
存储 机器学习/深度学习 搜索推荐
【趣学C语言和数据结构100例】86-90
本文介绍并用C语言实现了五种经典排序算法:直接插入排序、折半插入排序、冒泡排序、快速排序和简单选择排序。每种算法都有其特点和适用场景,如直接插入排序适合小规模或基本有序的数据,快速排序则适用于大规模数据集,具有较高的效率。通过学习这些算法,读者可以加深对数据结构和算法设计的理解,提升解决实际问题的能力。
120 4
|
7月前
|
定位技术 C语言
c语言及数据结构实现简单贪吃蛇小游戏
c语言及数据结构实现简单贪吃蛇小游戏
|
8月前
|
搜索推荐 C语言
数据结构(C语言)之对归并排序的介绍与理解
归并排序是一种基于分治策略的排序算法,通过递归将数组不断分割为子数组,直到每个子数组仅剩一个元素,再逐步合并这些有序的子数组以得到最终的有序数组。递归版本中,每次分割区间为[left, mid]和[mid+1, right],确保每两个区间内数据有序后进行合并。非递归版本则通过逐步增加gap值(初始为1),先对单个元素排序,再逐步扩大到更大的区间进行合并,直至整个数组有序。归并排序的时间复杂度为O(n*logn),空间复杂度为O(n),且具有稳定性,适用于普通排序及大文件排序场景。
|
10月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
278 5
|
10月前
|
程序员 编译器 C语言
C语言中的预处理器指令,涵盖其基本概念、常见指令(如`#define`、`#include`、条件编译指令等)、使用技巧及注意事项
本文深入解析C语言中的预处理器指令,涵盖其基本概念、常见指令(如`#define`、`#include`、条件编译指令等)、使用技巧及注意事项,并通过实际案例分析,展示预处理器指令在代码编写与处理中的重要性和灵活性。
434 2
|
10月前
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
230 2
|
10月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
254 1
|
5天前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
223 0