题目链接:点击打开链接
题目大意:略。
解题思路:注意:if(S==-1) break; 而不是 if(S==-1) return; 否则最后的 -1 的更新没办法更新上去。
AC 代码
void ShortestDist( MGraph Graph, int dist[], Vertex S )
{
int vis[MaxVertexNum];
for(int i=0;i<MaxVertexNum;i++) vis[i]=0, dist[i]=INFINITY;
dist[S]=0;
while(1)
{
int mi=INFINITY; S=-1;
for(int i=0;i<Graph->Nv;i++)
if(!vis[i] && mi>dist[i])
mi=dist[i], S=i;
if(S==-1) break;
vis[S]=1;
for(int i=0;i<Graph->Nv;i++)
if(!vis[i] && mi+Graph->G[S][i]<dist[i])
dist[i]=mi+Graph->G[S][i];
}
for(int i=0;i<MaxVertexNum;i++)
if(dist[i]==INFINITY) dist[i]=-1;
}