数据结构基础详解(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的有向图,称为有向树

目录
打赏
0
7
8
2
121
分享
相关文章
【数据结构进阶】AVL树深度剖析 + 实现(附源码)
在深入探讨了AVL树的原理和实现后,我们不难发现,这种数据结构不仅优雅地解决了传统二叉搜索树可能面临的性能退化问题,还通过其独特的平衡机制,确保了在任何情况下都能提供稳定且高效的查找、插入和删除操作。
299 19
|
4月前
|
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
121 3
 算法系列之数据结构-Huffman树
c语言及数据结构实现简单贪吃蛇小游戏
c语言及数据结构实现简单贪吃蛇小游戏
数据结构(C语言)之对归并排序的介绍与理解
归并排序是一种基于分治策略的排序算法,通过递归将数组不断分割为子数组,直到每个子数组仅剩一个元素,再逐步合并这些有序的子数组以得到最终的有序数组。递归版本中,每次分割区间为[left, mid]和[mid+1, right],确保每两个区间内数据有序后进行合并。非递归版本则通过逐步增加gap值(初始为1),先对单个元素排序,再逐步扩大到更大的区间进行合并,直至整个数组有序。归并排序的时间复杂度为O(n*logn),空间复杂度为O(n),且具有稳定性,适用于普通排序及大文件排序场景。
|
6月前
|
C++
【C++数据结构——树】二叉树的性质(头歌实践教学平台习题)【合集】
本文档介绍了如何根据二叉树的括号表示串创建二叉树,并计算其结点个数、叶子结点个数、某结点的层次和二叉树的宽度。主要内容包括: 1. **定义二叉树节点结构体**:定义了包含节点值、左子节点指针和右子节点指针的结构体。 2. **实现构建二叉树的函数**:通过解析括号表示串,递归地构建二叉树的各个节点及其子树。 3. **使用示例**:展示了如何调用 `buildTree` 函数构建二叉树并进行简单验证。 4. **计算二叉树属性**: - 计算二叉树节点个数。 - 计算二叉树叶子节点个数。 - 计算某节点的层次。 - 计算二叉树的宽度。 最后,提供了测试说明及通关代
142 10
|
6月前
|
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
【数据结构——树】哈夫曼树(头歌实践教学平台习题)【合集】目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:任务描述 本关任务:编写一个程序构建哈夫曼树和生成哈夫曼编码。 相关知识 为了完成本关任务,你需要掌握: 1.如何构建哈夫曼树, 2.如何生成哈夫曼编码。 测试说明 平台会对你编写的代码进行测试: 测试输入: 1192677541518462450242195190181174157138124123 (用户分别输入所列单词的频度) 预
159 14
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
|
6月前
|
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
156 12
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
210 2
C语言中的预处理器指令,涵盖其基本概念、常见指令(如`#define`、`#include`、条件编译指令等)、使用技巧及注意事项
本文深入解析C语言中的预处理器指令,涵盖其基本概念、常见指令(如`#define`、`#include`、条件编译指令等)、使用技巧及注意事项,并通过实际案例分析,展示预处理器指令在代码编写与处理中的重要性和灵活性。
340 2
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
273 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问