Dijkstra算法。
设起点为s,dist[i]为s到i点的最短距离。mark[i]表示i点是否被标记(1为标记,0位未标记)
①、初始值如果map[s][i]有权(即原始图中有s到i的边)dist[i]为map[s][i],否则dist[i]为无穷大。mark除了mark[s]为1,其他的都为0
②、找到没有被标记的最小dist(即找到一个k,其中mark[k]=0,且dist[k]为最小)。把它标记(mark[k]=1)。
如果找不到则结束。
③、对于每一个还没有标记的点i,看看是否map[s][k]+map[k][i] < dist[i],如果小于,更新dist[i]。继续执行②。
参考程序