0.用于控制已经确定的最小点是st[]数组而不是堆!
1.为什么需要while(q.size())?
首先看while循环次数,就是q.size()的大小,q.size()的大小由内层循环q.push()决定,push实在遍历边时才可能发生的,最多等于边数,所以外层最多m次.
2.内部原理
堆用于更新当前点的临接点的权重,权重的定义是从起点1到n的权重,更新权重的过程如果有重边,会多更新几次。
之所以用堆,可以将最小的权重点首先取出,如果已经遍历过,就直接continue,将重边较大的边去除。