Dijkstra 算法
单源最短路径
define INF
=
正无穷
w[x][y]表示边不存在(x,y)
memset(v, 0 , sizeof (v)); // 将所有点标记为没有进入集合
for ( int i = 1 ;i <= n;i ++ )
d[i] = (i == 0 ? 0 :INF); // 0为源点 到本身到距离为0 其余点到源点到距离为正无穷
for ( int i = 1 ;i <= n;i ++ )
{
int x,m = INF;
for ( int y = 1 ;y <= n;y ++ ) // 选取到源点最的点
if ( ! v[y] && d[y] <= m)
{
m = d[y];
x = y;
}
v[x] = 1 ; // 点x到最短路径已经找到 加入集合
for ( int y = 1 ;y <= n;y ++ ) // 对x到邻节点进行降距操作
if (d[y] > d[x] + w[x][y])
d[y] = d[x] + w[x][y];
}
w[x][y]表示边不存在(x,y)
memset(v, 0 , sizeof (v)); // 将所有点标记为没有进入集合
for ( int i = 1 ;i <= n;i ++ )
d[i] = (i == 0 ? 0 :INF); // 0为源点 到本身到距离为0 其余点到源点到距离为正无穷
for ( int i = 1 ;i <= n;i ++ )
{
int x,m = INF;
for ( int y = 1 ;y <= n;y ++ ) // 选取到源点最的点
if ( ! v[y] && d[y] <= m)
{
m = d[y];
x = y;
}
v[x] = 1 ; // 点x到最短路径已经找到 加入集合
for ( int y = 1 ;y <= n;y ++ ) // 对x到邻节点进行降距操作
if (d[y] > d[x] + w[x][y])
d[y] = d[x] + w[x][y];
}