优先队列优化迪杰斯特拉
∙ \bullet ∙在最朴素的迪杰斯特拉中,我们每次都要跑一层循环来找到最小的 d [ i ] d[ i ] d[i]( d [ i ] d[ i ] d[i]代表起点到 i i i这个点的最小距离)然后再更新与 i i i点有边相连的没有被走过的点 j j j的 d [ j ] d[j] d[j]
void dij(int start)
{
d[start]=0;
for(int i=1;i<=n;i++){
int minpos=-1;
for(int j=1;j<=n;j++){
if((vis[j]==0)&&(minpos<0||d[j]<d[minpos]))
minpos=j;
}
vis[minpos]=1;
if(d[minpos]==inf)break;
for(int i=head[minpos];i!=-1;i=edge[i].next)
if(d[minpos]+edge[i].val<d[edge[i].to]