一、朴素Dijkstra
朴素Dijkstra常用于解决稠密图问题,稠密图建图方法为“邻接矩阵”,邻接矩阵对于重边问题只需在输入边权的时候取最小值即可:
while(m --)//m为边的数量
{
scanf("%d%d%d", &a, &b, &c);//a-->b边权为c
g[a][b] = min(g[a][b], c);
}
二、堆优化版Dijkstra
堆优化版的Dijkstra无需担心重边的问题,假设1->2有权重为2和3的边,当用点1去更新2号点的最短距离dist的时候,2号点会更新两次放入堆中,如此以来堆中会有很多冗余的点,但是在弹出的时候还是会弹出最小值2+dist[1](dist[1]为1号点确定的最短路径),并标记st[2]为true,因此下一次弹出3+dist[1]会直接continue而不会继续向下执行。