输入
3 3
1 2 2
2 3 1
1 3 4
int h[N], e[N], ne[N], idx;
int w[N]; // 用来存权重
void add(int x, int y, int c)
{
// 有重边也不要紧,假设1->2有权重为2和3的边,再遍历到点1的时候2号点的距离会更新两次放入堆中
// 这样堆中会有很多冗余的点,但是在弹出的时候还是会弹出最小值2+x(x为之前确定的最短路径),
// 并标记st为true,所以下一次弹出3+x会continue不会向下执行。
w[idx] = c;
e[idx] = y;
ne[idx] = h[x];
h[x] = idx++;
}
/*输出结果*/
for (int i = 1; i <= n; i++) {
cout << "Vertex " << i << ":\n";
for (int j = h[i]; j != -1; j = ne[j]) {
int k = e[j];
cout << " " << i << " -> " << k << " w = " << w[j] << endl;
}
}