Dijkstra

来源:互联网 发布:算法设计中文版 编辑:程序博客网 时间:2024/05/17 04:06
void Dijkstra( int v0 ) //求顶点v0 到其他顶点的最短路径
{
    int i, j, k; //循环变量
    for( i=0; i<n; i++ )
    {
        dist[i] = Edge[v0][i];
        S[i] = 0;
        if( i!=v0 && dist[i]<INF ) path[i] = v0;
        else path[i] = -1;
    }
    S[v0] = 1;
    dist[v0] = 0; //顶点v0 加入到顶点集合S
    for( i=0; i<n-1; i++ ) //从顶点v0 确定n-1 条最短路径
    {
        int min = INF, u = v0;
//选择当前集合T 中具有最短路径的顶点u
        for( j=0; j<n; j++ ) //(1)
        {
            if( !S[j] && dist[j]<min )
            {
                u=j;
                min = dist[j];
            }
        }
        S[u] = 1; //将顶点u 加入到集合S,表示它的最短路径已求得 //(2)
//修改T 集合中顶点的dist 和path 数组元素值 //(3)
        for( k=0; k<n; k++ )
        {
            if( !S[k] && Edge[u][k]<INF && dist[u] + Edge[u][k] < dist[k] )
            {
                dist[k] = dist[u] + Edge[u][k];
                path[k] = u;
            }
        }
    }
}
0 0
原创粉丝点击