最短路径算法讲解(以 Dijkstra 为主)
一、引言:为什么需要最短 路径?
在现实生活中,我们常常遇到这样的问题:
- 地图导航软件如何计算从A地到B地的最短路线?
- 网络通信中,数据包如何选择最优路径传输?
- 游戏中角色如何自动寻路?
这些问题都可以抽象为图论中的最短路径问题。
本讲义将围绕Dijkstra算法展开,适合已经掌握**深度优先搜索(DFS)和动态规划(DP)**基础的同学。我们将从图的基本概念讲起,逐步过渡到 Dijkstra 的原理、实现与优化,并提供配套 C++ 示例代码与练习题。
二、图的基本概念回顾
1. 图的定义
图由顶点(节点)和边组成:
- 无向图:边没有方向
- 有向图:边有方向
- 带权图:每条边有权值(如距离、时间等)
2. 图的表示方法
- 邻接矩阵:适用于稠密图
- 邻接表