一、图论,最短路径问题之朴素dijkstra算法
1.符号定义:共有N个点,找N点到1号点的最短距离;g[N][N]存储每条边的权重;dist[N]存储1号点到每个点的最短距离;st[N]存储每个点的最短路是否已经确定
2.步骤:
(1)先将所有的点到1号点的距离初始化为正无穷;
(2)每次从未标记的节点选择距离出发点最近的节点t并标记st[t]=true;
(3)更新j点到1号点的距离:dist[j] = min(dist[j], dist[t] + g[t][j]);
代码模板:
int g[N][N]; // 存储每条边
int dist[N]; // 存储1号点到每个点的最短距离
bool st[N]; // 存储每个点的最短路是否已经确定
// 求1号点到n号点的最短路,如果不存在则返回-1
int dijkstra()
{
memset(dist, 0x3f, sizeof dist);//距离dist一开始初始化为无穷大
dist[1] = 0;
for (int i = 0; i < n - 1; i ++ )
{
int t = -1;// 在未标记(未确定最短路长度)的节点中找距离最小