原题链接:HDOJ 1874 畅通工程续
解题思路:
运用迪杰斯特拉算法,状态转移方程:Dist[i]=min(Dist[i],Map[S][i]+Dist[S]);
代码实现:
#include<bits/stdc++.h>
using namespace std;
#define inf 0x7FFFFFFF
int main()
{
int M,N,A,B,X,S,T,Min,next;
while(cin>>N>>M){
int Dist[M],Map[M][M],visit[M];
for(int i=0;i<N;i++){
visit[i]=1; //所有城市标记为未访问
Dist[i]=inf; //所有路径标记为无穷大
for(int j=0;j<N;j++)
Map[i][j]=inf;
}
while(M--){
cin>>A>>B>>X;
Map[B][A]=min(Map[A][B],X);
Map[A][B]=Map[B][A];
}
cin>>S>>T;
Dist[S]=0;
visit[S]=0;
while(S!=T){
Min=inf;
for(int i=0;i<N;i++){
if(Map[S][i]!=inf)
Dist[i]=min(Dist[i],Map[S][i]+Dist[S]);
if(visit[i]&&Dist[i]<Min){
next=i;
Min=Dist[i];
}
}
if(Min==inf) break;
S=next;
visit[S]=0;
}
if(Dist[T]==inf)
cout<<"-1"<<endl;
else
cout<<Dist[T]<<endl;
}
return 0;
}