距上次敲最短路已过去将近一年了吧。
如今再敲, 存图方式也从邻接矩阵, 邻接表变成了更优秀的链式向前星。时间过得真快呀。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int maxn = 1e5 + 10;
const int inf = 1e9 + 7;
int head[maxn], d[maxn];
bool vis[maxn];
int n, m, cnt;
struct node{
int v, nex, len;
}edge[maxn];
void addedge(int u, int v, int len)
{
edge[cnt].v = v;
edge[cnt].nex = head[u];
edge[cnt].len = len;
head[u] = cnt++;
}
void dijkstra(int s)
{
fill(d, d + maxn, inf);
d[s] = 0;
for(int i = 1; i <= n; i++) {
int u = -1, MIN = inf;
for(int j = 1; j <= n; j++) {
if(vis[j] == false && d[j] < MIN) {
u = j;
MIN = d[j];
}
}
vis[u] = true;
for(int j = head[u]; j != -1; j = edge[j].nex) {
int v = edge[j].v;
if(vis[v] == false && d[u] + edge[j].len < d[v]) {
d[v] = d[u] + edge[j].len;
}
}
}
}
void init()
{
memset(head, -1, sizeof(head));
}
int main()
{
ios::sync_with_stdio(false);
init();
int s, t;
cin >> n >> m >> s >> t;
int x, y, z;
for(int i = 1; i <= m; i++) {
cin >> x >> y >> z;
addedge(x, y, z);
addedge(y, x, z);
}
dijkstra(s);
cout << d[t] << endl;
return 0;
}