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