news 2026/7/12 4:38:20

图论的小技巧和易错点

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
图论的小技巧和易错点

Part 0 题目

在解题前,需要先明确题目的图的模型:

  1. :题目中的边代表什么?给定的是点权还是边权,如果是点权,应该如何转为边权?边是有向边还是无向边?
  2. :图是简单图吗?是否存在重边或自环,存在重边或自环时应该如何处理?或者它是一棵树?
  3. 规模:题目是否给出了顶点数n nn和边数m mm?还是需要手工计算n nnm mm

Part 1 建图

Part 1.1 邻接表

  1. 为什么要使用邻接表存图,而不是其他方式?
  2. 存入的是代表是否两点连通的01还是边权?

Part 1.2 邻接矩阵

作者不常用,所以没有总结出太多的易错点和技巧……

Part 1.3 链式前向星

  1. 边是否无向,如果是,存边的数组大小是否达到了2 × N 2 \times N2×N
  2. 边的编号是从0 00开始还是1 112 22开始(注意边双连通分量的建图必须从2 22开始)。

Part 2 最短路

Floyd

  1. Floyd 算法一般使用「邻接矩阵」进行存图。

  2. Floyd 的最外层k为什么必须放在最外层?

    解释

    Floyd 算法的主要思想是动态规划,其状态转移方程为:
    d i s i , j = min ⁡ ( d i s i , j , d i s i , k + d i s k , j ) dis_{i,j} = \min(dis_{i,j},\; dis_{i,k} + dis_{k,j})disi,j=min(disi,j,disi,k+disk,j)
    (最短路场景),或在传递闭包场景中的:
    d i s i , j = d i s i , k ∧ d i s k , j dis_{i,j} = dis_{i,k} \land dis_{k,j}disi,j=disi,kdisk,j
    算法必须保证在计算d i s i , j dis_{i,j}disi,j时,所有以1 11k − 1 k-1k1为中间点的最短路径(或传递关系)都已计算。

    若将k kk放入内层循环,可能在更新d i s i , j dis_{i,j}disi,j时,所需的d i s i , k dis_{i,k}disi,kd i s k , j dis_{k,j}disk,j未被正确计算或未计算,导致结果错误。

  3. Floyd 算法可以计算每个节点恰好或至多经过k kk步可达的点集。
    恰好 k 步:初始可达数组d i s disdisk kk次方
    至多 k 步:为每个节点i ii增加一条自环(即d i s i , i = 1 dis_{i,i} = 1disi,i=1),再进行k kk次方。

SPFA

  1. 小心出题人卡 SPFA,SPFA 在某些特殊构造的数据下可能退化为O ( N × M ) O(N \times M)O(N×M)的时间复杂度。

Dijkstra

适用条件

用于无负权边的图。

使用前应明确

  1. 求的是单源最短路还是多源最短路?
  2. 每个点的初值是否足够大?
  3. 源头节点的初值是0 00或是x xx
  4. 边权的含义。

版本

朴素版本:适用于稠密图。
堆优化版本:适用于大多数图。

过程

  1. 更新边权的时候可以直接更新吗,还是像旅行巴士一样有一些限制。

Part 3 其他

其他内容敬请期待…

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/12 4:37:19

光敏传感器控制蜂鸣器

MAIN #include “stm32f10x.h” #include “Delay.h” #include “Buzzer.h” uint8_t KeyNum; int main(void) { Buzzer_Init(); LightSensor_Init(); while (1) { if(LightSensor_Get()1)//光线很暗 { Buzzer_ON(); } else { Buzzer_OFF(); } } } LightSensor的c文件 #includ…

作者头像 李华
网站建设 2026/7/12 4:33:51

GitHub 双仓库策略:保护源码与分发二进制文件的 2 种权限模型对比

GitHub 双仓库策略:源码保护与二进制分发的权限架构实战在开源与商业并行的软件开发时代,如何平衡代码安全与产品分发成为技术决策者的核心挑战。本文将深入解析基于 GitHub 的双仓库权限模型设计,通过私有仓库保护核心知识产权,同…

作者头像 李华
网站建设 2026/7/12 4:31:12

混动汽车实训教学的信息化解法:虚拟仿真软件落地实践与深度测评

随着新能源汽车产业的快速发展,混合动力技术作为核心技术路线,已成为职业院校汽车专业的重点教学方向。但混动系统多部件深度耦合、实训设备成本高、高压操作存在安全风险等问题,长期制约着实训教学的质量与效率。作为拥有 6 年新能源混动汽车…

作者头像 李华
网站建设 2026/7/12 4:29:45

Python 分支与循环完全指南——从 if/else 到 for 循环一网打尽

引言各位大佬大家早中晚上嚎呀,又到了愉快的学习时间了,本文主要详解了python中分支与循环的内容,干货满满哦!在 Python 编程中,流程控制是程序逻辑的核心。无论是条件判断还是重复执行,都离不开 分支结构 …

作者头像 李华
网站建设 2026/7/12 4:29:34

Linux下Docker Compose里运行Nginx故障诊断Shell脚本

#!/bin/bash # # Nginx on Docker Compose 故障系统化诊断脚本 # 融哲于技:本体论、奥卡姆剃刀、辩证法、实用主义、道家无为、整体论 # # 功能:针对 Docker Compose 管理的 Nginx 服务意外中断进行系统化取证与诊断 # 使用:./nginx_diagno…

作者头像 李华
网站建设 2026/7/12 4:28:43

多模态大模型驱动CV智能涌现:技术原理与应用实践

最近在AI技术社区中,"智能涌现"这个概念被频繁提及,特别是随着多模态大模型的快速发展,计算机视觉(CV)领域正经历着前所未有的变革。作为长期关注AI技术演进的技术从业者,我深切感受到CV技术正在…

作者头像 李华