#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 2510, M = 6210;
int n, m, s, t;
int g[N][N];
int dist[N];
bool st[N];
void dijkstra()
{
memset(dist, 0x3f, sizeof dist); // 初始化距离数组,将所有距离设为无穷大
dist[s] = 0; // 起点到自身的距离为0
for (int i = 1; i <= n; i ++ )
{
int t = -1;
for (int j = 1; j <= n; j ++ )
if (!st[j] && (t == -1 || dist[t] > dist[j]))
t = j; // 找到当前未访问的节点中距离最小的节点
st[t] = true; // 将该节点标记为已访问
for (int j = 1; j <= n; j ++ )
dist[j] = min(dist[j], dist[t] + g[t][j]); // 更新其他节点的距离
}
}
int main()
{
memset(g, 0x3f, sizeof g); // 初始化邻接矩阵,将所有边的权重设为无穷大
cin >> n >> m >> s >> t; // 输入节点数、边数、起点和终点
while (m -- )
{
int a, b, c;
cin >> a >> b >> c; // 输入边的起点、终点和权重
g[a][b] = g[b][a] = min(g[a][b], c); // 更新邻接矩阵,取较小权重
}
dijkstra(); // 调用Dijkstra算法求解最短路径
cout << dist[t] << endl; // 输出终点到起点的最短距离
return 0;
}
1129. 热浪 单源最短路 dijkstra
最新推荐文章于 2024-07-25 11:27:31 发布