首先设置顶点集合S, 将起始点加入该集合,根据起始点到其他顶点的路径长度,选择路径长度最小的顶点加入集合,根据所加入顶点更新源点到其他顶点的路径长度,然后在寻找最小边的顶点,重复上述操作直到求出所有顶点的长度。下面是代码:
void dijkstra (int n)
{
for (int i=1; i<=n; ++i)
{
vis[i] = 0;
dis[i] = map[1][i];//map存放各点之间的距离,dis存放各点到其他点的最短距离
}
for (int i=1; i<=n; ++i)
{
int min = inf, x = 0;//inf是无穷大
for (int j = 1; j <=n; ++j)//查找当前最短路
{
if (vis[j] == 0 && dis[j] < min)
{
m = dis[j];
x = j;
}
}
vis[x] = 1;
for (int j = 1; j<=n; ++j)
{
if (vis[j] == 0 && dis[x] + map[x][j] <dis[j])//松弛
dis[j] = dis[x] + map[x][j];
}
}
}