优先队列优化迪杰斯特拉
∙\bullet∙在最朴素的迪杰斯特拉中,我们每次都要跑一层循环来找到最小的 d[i]d[ i ]d[i](d[i]d[ i ]d[i]代表起点到iii这个点的最小距离)然后再更新与iii点有边相连的没有被走过的点jjj的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])
d[edge[i]