尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

图论入门:从离散数学基础到欧拉回路与工程应用

发布时间:2026/9/29 6:47:38

资讯中心
01
ARTICLE

图论入门:从离散数学基础到欧拉回路与工程应用

图论入门:从离散数学基础到欧拉回路与工程应用
1. 为什么图论会让离散数学变得又简单又难第一次翻开《离散数学》第8章图的人大多会有一种错觉图不就是画几个圈、连几条线吗这也能成一章等真正学进去才发现图论是整本教材里最反直觉的部分之一——它看起来像小学数学做起来却处处是陷阱。我在教这门课和带学生复习的过程中几乎每年都能看到同一种现象前面几章命题逻辑、集合论学得还不错的人到图论这里反而开始掉队。原因很简单图论考核的不只是记忆而是把实际问题翻译成图模型的能力。这一章之所以被放在离散数学的第8章是因为它把前面学过的关系、集合、函数全部串起来了。一张图本质上就是一个二元关系顶点集合是论域边集合是关系对。甚至可以说学懂图论之后你对前面关系及其性质那部分的理解会突然上一个台阶。所以别把第8章当成孤立的一章来背它是整本离散数学的集大成章节。这篇内容我会按照我平时给学生梳理的思路走一遍从图的定义、表示方法到路径回路、图的着色最后落到期末题型和工程应用。无论你是正在准备离散数学期末考试还是想搞明白图数据结构在后端算法里的真实用法这篇都能给你一套可以直接抄作业的理解框架。1.1 一张图到底由什么组成严格定义很简单图G是一个有序二元组(V, E)其中V是非空顶点集合E是边的集合每条边是V中两个顶点的无序对或有序对。无序对对应无向图有序对对应有向图。这里有个初学者特别容易忽略的点图是有序二元组不是集合。也就是说两张图相等不仅要顶点集合一样边的集合也必须完全一样。我在批改作业时经常看到有人写图G {V, E}集合用花括号这就不严谨了因为集合不强调顺序而图的序偶( V, E)规定了哪个是顶点集、哪个是边集。这个细节看起来小考试判断题里却是高频考点。另外一个基础概念是相邻与关联。两个顶点之间如果存在一条边称这两个顶点相邻一条边的端点与这条边之间称关联。一个顶点的度是它关联的边数有向图里则区分入度和出度。这些概念单独看都不难但组合起来可以出很多题比如握手定理就是从这里来的。1.2 握手定理图论第一个让你觉得神奇的结论握手定理的表述很简单所有顶点的度之和等于边数的两倍即Σdeg(v) 2|E|。推论更常用奇度顶点的个数一定是偶数。为什么叫握手定理你想象一群人两两握手每一次握手都会让两个人的握手次数各加1所以所有人握手次数的总和必然是2的倍数。这个类比我在课上一定会讲因为它是理解后面欧拉回路、哈密顿回路、以及各种图论证明题的基础。做题的时候握手定理最常见的三种用法已知各顶点度数求边数、判断一个图的度数序列是否合法、证明不可能出现奇数个人握手次数都是奇数这类命题。比如给你一个度数序列(3, 3, 3, 3)因为每一项都是奇数一共有4项奇数度顶点是偶数个满足握手定理但如果序列是(3, 3, 3, 5, 0)奇数度顶点有4个也满足。真正判断序列是否合法光靠握手定理还不够还要检查最大度不超过顶点数减1等条件。这种题期末很喜欢考就是一个先查奇偶个数、再查度数范围的两步流程。2. 图的表示方法邻接矩阵、邻接表和关联矩阵实战里怎么选图论不光是纸面推导它更是计算机科学的基础。这一节我主要讲一个很多教材只是零散带过、但实际特别重要的问题一张图在计算机里到底该怎么存第8章教材里一般会讲三种表示方法邻接矩阵、邻接表、关联矩阵。很多学生把它们当成三种并列的知识点背下来但换成工程视角看它们完全不是同一层次的东西。邻接矩阵和邻接表是同一种需求的两个方案——它们都在回答哪些顶点之间有没有边而关联矩阵回答的是每条边连接了哪些顶点用途偏理论证明比如用在网络流和匹配问题上。我建议你从查询效率 vs 存储开销这个角度去理解它们的选择逻辑。2.1 邻接矩阵与邻接表的成本对比先说邻接矩阵假设顶点数为n用一个n×n的矩阵A存储A[i][j]1表示顶点i到j有边。判断两点是否相邻的时间复杂度是O(1)非常快代价是空间永远是n²不管边多稀疏都一样。1000个顶点的图矩阵就是100万个元素存储上不划算。但它的一个隐藏优势是矩阵运算可以直接借用线性代数的工具比如A的k次幂中A^k[i][j]正好表示顶点i到j长度为k的路径数。这个结论期末考试经常考也是理解图与矩阵关系的一个绝佳窗口。邻接表则是对每个顶点挂一条链表只存它实际相邻的顶点。空间复杂度O(nm)m为边数。对稀疏图来说邻接表远优于矩阵但判断两点是否相邻需要遍历链表最坏情况O(n)。实际写代码时比如用C的vector 或者Python的list套set都可以实现邻接表。我有一次给一个做地图路网项目的朋友调程序他一开始用邻接矩阵存全国几百万个路口的拓扑关系内存直接爆掉。换成邻接表之后存储降了几个数量级。这就是典型的稀疏图场景——路口很多但每个路口连接的道路就几条。所以我常和学生说别只看教材考试真正到工程里图的存储结构选错程序根本跑不起来。2.2 有向图与无向图的表示差异有向图的邻接矩阵不对称A[i][j]1和A[j][i]1含义不同邻接表里每条边只挂到出边的链表里。无向图则相反矩阵对称邻接表每条边要存两次。这个差异在做连通性判断时很关键下面会详细说。关联矩阵我单独提一句它是一个|V|行×|E|列的矩阵第i行第j列取1表示顶点i与边j关联。无向图中每列正好有两个1有向图则是一个-1和一个1。考试里关联矩阵的题很少一般只会让你根据图写出矩阵或反过来。但它在后面的匹配理论、网络流问题中是标准工具学有余力的人值得多看一眼。3. 路径与回路从柯尼斯堡七桥到汉密尔顿的百年追问图论这门学科的诞生公认是从1736年欧拉解决柯尼斯堡七桥问题开始的。当时普雷格尔河中有两座岛七座桥连接两岸和岛市民们想知道能不能从某地出发每座桥恰好走一次最后回到起点。欧拉把陆地抽象成顶点、桥抽象成边证明了这个走法不存在。这个历史故事几乎所有教材都会讲但我想强调的是它背后的方法论把现实问题变成图模型然后研究图本身的性质。七桥问题的本质是一个连通图中是否存在经过每条边恰好一次的回路现在叫欧拉回路。我每次讲到这里都会停下来问学生如果只是背结论每个顶点的度数都是偶数时存在欧拉回路那这道题就白学了。真正的收获是那种把问题翻译成图的思维这个能力在算法设计里一辈子受用。3.1 欧拉回路与一笔画问题的判断流程欧拉回路和欧拉路径的判定条件我这里直接给一个可以套用的流程先检查图是否连通忽略度为0的孤立点。如果存在欧拉回路则所有非孤立顶点的度都是偶数。如果存在欧拉路径但不闭合则恰好有两个顶点的度为奇数其余都是偶数。其他情况一律不存在。判断连通性本身是个高频考点。无向图的连通可以用DFS、BFS也可以用并查集考试手算时最简单的是从任一点出发看能否到达所有其他顶点。我在改卷时发现很多学生默认图是连通的看到度数条件满足就直接写存在欧拉回路结果图根本不是一个连通块瞬间丢分。这就是审题不仔细的典型代价。实际生活里一笔画游戏、快递员送报路线规划、电路板布线检测背后都是欧拉路径问题。我记得有一个经典应用题一个邮递员要遍历城市里每条街道至少一次怎么走最短这就是中国邮递员问题它的基础解法就是从欧拉图出发把奇度顶点两两配对并补路径。这类题目在教材里可能只是拓展但对理解欧拉回路的价值很有帮助。3.2 汉密尔顿回路看起来很像难度天差地别学完欧拉回路紧接着就是汉密尔顿回路经过每个顶点恰好一次最后回到起点。很多学生会想问边和顶点不就是对偶关系吗条件应该也很简单吧大错特错。欧拉回路存在性有简洁的充要条件汉密尔顿回路直到今天都没有一个简单的充要判定条件它是个NP完全问题。也就是说随着顶点数增加目前没有已知的多项式时间算法能对所有图判断它是否存在汉密尔顿回路。考试里考的通常是几个充分条件的应用。最重要的一个是Dirac定理如果n≥3的简单图每个顶点的度都至少为n/2则图存在汉密尔顿回路。还有一个Ore定理任意两个不相邻顶点u、v如果deg(u)deg(v)≥n则图存在汉密尔顿回路。做题时先看顶点个数再看度数条件是否满足能推出存在就直接结束。要注意这些定理只是充分条件不满足不代表不存在回路这是判断题最常见的陷阱。汉密尔顿回路的工程场景更偏路径规划和组合优化。比如旅行商问题(TSP)就是在完全加权图中找最短汉密尔顿回路送货调度、芯片打孔、基因测序拼接里都会遇到。它没有通用高效解法实际用的都是近似算法、启发式算法比如最近邻、模拟退火、遗传算法。学离散数学的时候知道这个概念将来在算法课或开源库里看到TSP就不会觉得陌生。3.3 连通性与图的删点删边问题一个无向图如果任意两个顶点之间都有路径称为连通图。有向图则分强连通、单向连通和弱连通。这些定义考试喜欢考选择和判断理解上不困难真正容易错的是弱连通的判定把有向边全部看成无向边后图连通就叫弱连通。判断强连通可以看是否存在一个顶点能到达其他所有顶点且其他顶点也能到达它。这部分延伸到工程里就是网络的健壮性。比如一个通信网络里某个交换机挂了会不会导致整个网络分崩离析这就是割点问题。一个顶点如果是割点删掉它之后图的连通分量数会增加。与之对应的是桥也就是删除后图不连通的边。我在讲这部分时会让学生用删除节点后图形的连通分量数是否变化来判断而不是凭直觉。图的连通分量也是一个基础概念做题时画出来数一数往往比硬想更快。4. 二分图、图着色与平面图把冲突关系翻译成图的语言第8章越到后面越会离开路径到底存不存在这类基础问题转向某些限制条件下能不能满足要求的资源分配问题。图着色和二分图匹配就是这类问题最典型的两大代表。4.1 图着色问题把冲突关系变成颜色分配所谓图着色就是给每个顶点分配一种颜色使得相邻顶点颜色不同问最少需要多少种颜色。这个最少颜色数叫色数。考试里色数一般不会太难求环形图、完全图、二分图、轮图的色数都是固定结论。实际应用中图着色最常见的场景是排课表和频率分配。比如大学排课把所有课程作为顶点如果两门课有同一批学生选就连接一条边。着色之后同一种颜色的课程就可以安排在同一时间开因为它们互不冲突。这个模型我读书时觉得复杂后来工作里做排课系统时才真正看懂它本质上是把约束冲突抽象成边。一个在离散数学里值得记住的定理是任何平面图的色数都不超过4这就是四色定理。它是最早由计算机辅助证明的著名数学定理之一很长一段时间里数学家都因为无法手算验证而接受得不情不愿。期末考试一般不要求证明四色定理最多考察平面图的判定和简单图的着色。4.2 二分图与匹配从任务分配到稳定婚姻二分图指的是顶点集可以被分成两个互不相交的集合X、Y使得所有边都连接X中的一个顶点和Y中的一个顶点。判断一个图是不是二分图最常用的方法是用黑白交替染色从某点开始给起点染黑色相邻点染白色再相邻点染黑色……如果过程中出现相邻点同色就不是二分图。更理论的说法是二分图等价于图中没有奇数长度的圈。匹配则是从边集中选出一些边使这些边没有公共端点。最大匹配问题在教材里通常用匈牙利算法求解。我记得当初学的时候匈牙利算法配着增广路径来理解会比较顺畅如果一条路径的起点和终点都是未匹配点且路径上的边交替出现不在匹配中、在匹配中、不在匹配中把这条路径上的边取反就能让匹配数加1。重复操作直到找不到增广路径就是最大匹配。工程里更多见的是带权匹配比如任务分配n个任务分配给n个人每个人做不同任务的成本不同求总成本最小。这就是指派问题上课讲的是匈牙利算法的推广形式。我在公司里用Python写排班脚本时直接调了scipy的linear_sum_assignment底层实现的就是这类算法。所以教材上那些看起来纯数学的匹配概念一旦遇到实际问题就是刚需。4.3 平面图与欧拉公式平面图是指边可以画在平面上且互不相交只在端点相交的图。判断平面图最著名的工具是库拉托夫斯基定理它说一个图是平面图当且仅当它不包含K5或K3,3的剖分子图。这个定理期末一般不要求完整掌握但K5和K3,3是经典的非平面图例子一定要记住。平面图有一个特别漂亮的欧拉公式V - E F 2其中V是顶点数E是边数F是面数包括外部无限面。这个公式不但可以用于求面数还能反过来证明K5和K3,3不是平面图。我记得第一次看到用欧拉公式推矛盾的过程时觉得数学确实精妙。实际应用方面平面图在电路板设计、地图绘制和网络可视化中都有价值因为人们更喜欢把没有交叉的图摊开来看。5. 期末实战图论题型、解题流程与失分重灾区到了期末复习阶段图论这章其实就几种固定题型。我把这几年最常见的题型和易错点整理一遍你对着这个清单自检比盲目刷题效率高很多。先说题型。给出顶点数和度数序列判断是否合法、是否可以构成简单图。步骤是先查奇数度顶点个数是否为偶数握手定理再查最大度是否≤n-1最后可以尝试用Havel-Hakimi算法把一个序列通过递归方式消减。根据图的图形写出邻接矩阵、邻接表或关联矩阵。这个属于送分题只要注意有向图的矩阵不对称即可。判断是否存在欧拉回路/欧拉路径/汉密尔顿回路。欧拉图套用度数条件汉密尔顿则看Dirac或Ore条件是否满足。求图的连通分量、判断强连通/弱连通。这个直接画图数或者跑一遍DFS。求图着色数、判断二分图。二分图用染色法着色数考试图大多简单直接手推。用Dijkstra或Floyd求最短路。有些学校把最短路也算进第8章最常考Dijkstra的手算过程注意每次选距离最小的顶点加入集合并更新邻接点距离。5.1 三道典型例题的完整解题节奏例1图G有10个顶点度数分别是4,4,4,4,4,3,3,3,3,3问G有多少条边这个直接用握手定理度数和5×45×335所以边数35/217.5不是整数说明这个度数序列根本不合法。很多学生算出17.5后还在怀疑自己哪里算错了其实题目给出的数据就是用来考握手定理的总数必须是偶数这一条。例2某连通图有8个顶点其中6个是奇数度顶点问这个图是否存在欧拉回路答案是否定的因为欧拉回路要求所有顶点的度都是偶数奇数度顶点个数为6显然不是0。但如果题目问的是欧拉路径答案就变为存在因为恰好两个奇数度顶点是欧拉路径的条件而这里奇数度顶点是6也不满足。所以看题要特别仔细回路和路径差两个字结论完全不同。例3判断一个5个顶点、每个顶点度都为2的连通图是什么类型度都为2的连通图是圈C5它存在欧拉回路也存在汉密尔顿回路色数是3奇数环的色数不是平面图的反例。这种综合选择题把好几个性质放在一起考只要一个知识点记错整题全错。5.2 高频失分点清单根据我的观察期末考图论学生最容易丢分的位置集中在以下几处把图是序偶丢掉在证明题里状态混乱。欧拉回路和汉密尔顿回路的概念混淆一个管边一个管顶点。判断汉密尔顿回路是否存在时误把充分条件当充要条件。求最短路的Dijkstra过程忘记在每一轮中更新未加入集合顶点的最短距离。二分图的染色判断从某个顶点出发发现矛盾就断言不是二分图却没注意图本身可能不连通需要每个连通分量都检查一遍。平面图的欧拉公式里面数F把外部无限面漏掉。前三个是概念理解不到位后三个是解题过程不完整。我建议复习时把每一个知识点都用自己的话先解释一遍再去看题。能讲清楚一个概念通常就是真懂的开始。6. 从教材到工程图论在算法与前沿方向里究竟怎么用第8章图论在离散数学里可能只是一个章节但放到整个计算机科学体系里它是很多核心内容的地基。我经常和学生说图论没学好后面数据结构里的图算法、算法设计里的最短路径、网络里的流计算、操作系统里的资源分配、甚至数据库里的查询计划都会觉得吃力。课程设计里最常见的图算法一个是深度优先搜索DFS一个是广度优先搜索BFS。DFS可以用来判断连通性、找割点、拓扑排序BFS可以求无权图的最短路径、判断二分图。这两个遍历方法写起来都不难但它们的时间复杂度、空间复杂度、适用场景到了面试和实际项目里却是考察重点。比如在无向图中用BFS判断二分图本质就是用交替染色的思路这在前面讲二分图时已经提前铺过路。另一个核心算法是单源最短路Dijkstra它要求边权非负。理解它每次选当前距离最小的顶点加入已确定集合的贪心逻辑比记住代码更关键。期末考试或面试中手推Dijkstra更新过程几乎是必考。与之对应的Bellman-Ford算法可以处理负权边还能检测负权回路但复杂度更高。Floyd算法则适合求全源最短路实现简洁但O(n³)的时间复杂度限制了它只适合小规模图。从更前沿的角度看热搜词里那些自适应图卷积、图神经网络、图计算等内容本质上都是把图的节点和边作为数据的基本单元进行处理。图神经网络的核心思想是消息传递每个节点不断聚合邻居节点的特征更新自己的表示。这种思路和传统离散数学里的邻接关系路径传播是一脉相承的。想深入的话我建议先把PageRank算法看明白它就是一个非常经典的图上迭代算法理解了PageRank再看图卷积或图注意力机制会顺畅很多。工程化地使用图数据结构时我有一个很实际的建议优先考虑用现成库不要自己造轮子。Python里networkx可以快速构建图、算最短路、求连通分量、做可视化需要处理大规模图时可以用igraph或者Graph-tool。做关系分析时图数据库比如Neo4j也值得接触它的Cypher查询语言就是为图结构量身定做的。我在做推荐系统里用户-物品二部图分析时networkx加pandas就能处理几十万量级的数据这个组合足够覆盖大多数人起步阶段的需求。最后分享一个我自己的体会。图论这章如果只用背结论做练习的方式去学收获会非常有限。最好的学习方式是找一个真实场景把它建成图模型再用代码实现一遍。比如你把微信好友关系建成一张无向图然后试着求一下自己所在连通分量的大小或者用Dijkstra算一算两个地铁站之间的最短换乘路径。做完几个这样的小项目再看第8章那些定理和公式它们就不再是冰冷的考点而是有血有肉的工具。这也是我个人学习离散数学下来收获最大的一条经验。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。