题目链接: hdu 1874 畅通工程续
若不存在a到b的道路,则a到b的距离为无穷,最后判断一下即可
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 222
using namespace std;
const int inf = 1<<29;
int vis[maxn],dis[maxn],mapp[maxn][maxn],n,m;
void Dijkstra(int a)
{
fill(dis,dis+maxn,inf);
fill(vis,vis+maxn,0);
dis[a]=0;
while(true)
{
int v = -1;
for(int i=1;i<=n;i++)
if(!vis[i]&&(v==-1||dis[v]>dis[i])) v=i;
if(v==-1) break;
vis[v]=1;
for(int i=1;i<=n;i++) dis[i]=min(dis[i],dis[v]+mapp[v][i]);
}
}
int main()
{
while(cin>>n>>m)
{
int a,b,x;
fill(&mapp[0][0],&mapp[maxn][0],inf);
while(m--)
{
cin>>a>>b>>x;
a++,b++;
mapp[a][b]=mapp[b][a]=min(mapp[a][b],x);
}
cin>>a>>b;
a++,b++;
Dijkstra(a);
if(dis[b]==inf) cout<<-1<<endl;
else cout<<dis[b]<<endl;
}
return 0;
}