Data Structures and Algorithms (English) - 6-17 Shortest Path [4](25 分)

题目链接:点击打开链接

 

题目大意:略。

 

解题思路:注意:因为一开始 mi==0 导致 0+无法到达的点(INF)==INF==dist[i],s.t. num[i]、path[i] 误被更新,所以需要再加个判断条件——“Graph->G[S][i]!=INFINITY”,这样也省了再末尾重新更新。

 

AC 代码

void ShortestDist( MGraph Graph, int dist[], int path[], Vertex S )
{
    int vis[MaxVertexNum], num[MaxVertexNum];
    for(int i=0;iNv;i++) num[i]=vis[i]=0, dist[i]=INFINITY, path[i]=-1;
    dist[S]=0;

    while(1)
    {
        int mi=INFINITY; S=-1;
        for(int i=0;iNv;i++)
            if(!vis[i] && mi>dist[i]) mi=dist[i], S=i;

        if(S==-1) break;
        vis[S]=1;

        for(int i=0;iNv;i++)
        {
            if(!vis[i] && Graph->G[S][i]+miG[S][i]+mi;
                num[i]=num[S]+1;
                path[i]=S;
            }
            else if(!vis[i] && Graph->G[S][i]+mi==dist[i] && Graph->G[S][i]!=INFINITY)
            {
                if(num[S]+1

 

你可能感兴趣的:(#,ACM,#,PTA,#,图,#,Dijkstra)