struct cmp { //优先队列的比较函数
bool operator()(int a, int b) {
return dist[a] > dist[b];
}
};
void dijkstra(int start) {
priority_queue<int, vector<int>, cmp> q;
q.push(start);
dist[start] = 0;
while (!q.empty()) {
int u = q.top();
q.pop();
if (visit[u]) continue;
visit[u] = true;
for (int i = head[u]; i; i = Next[i]) { //邻接表,遍历以 u 为起点的所有路径
int v = destination[i]; // v是当前路径的终点
if (!visit[v] && dist[v] > dist[u] + (long long)edgeLen[i]) {
dist[v] = dist[u] + edgeLen[i];
q.push(v);
}
}
}
}