您的位置:首页 > 其它

hdu 2066 一个人的旅行

2017-06-06 18:25 393 查看
最短路问题。果然好久不做都忘得差点儿相同了,跑一次Dijkstra算法把全部点的最短距离都跑出来

#include<iostream>
#include<cstring>
#define maxn 1005
#define inf 1<<30
using namespace std;
int t,s,d;
int mapp[maxn][maxn];
int w[maxn];
int visit[maxn];
int di[maxn];
void solve()
{
memset(visit,0,sizeof(visit));
fill(di,di+maxn,inf);
di[0]=0;
while(t--)
{
int v=-1;
for(int i=0;i<maxn;i++)
{
if(!visit[i]&&(v==-1||di[i]<di[v])) v=i;
}
//cout<<s<<"~"<<v<<endl;
visit[v]=1;
for(int i=0;i<maxn;i++)
{
if(mapp[v][i]!=inf)
{
di[i]=min(di[i],di[v]+mapp[v][i]);
//cout<<i<<"~"<<di[i]<<endl;
}
}
}
}
int main()
{
while(cin>>t>>s>>d)
{
for(int i=0;i<maxn;i++)
{
for(int j=0;j<maxn;j++) mapp[i][j]=inf;
}
for(int i=0;i<t;i++)
{
int x,y,z;
cin>>x>>y>>z;
mapp[y][x]=mapp[x][y]=min(z,mapp[x][y]);
}
for(int i=0;i<s;i++)
{
int x;
cin>>x;
mapp[0][x]=mapp[x][0]=0;
}
for(int i=0;i<d;i++) cin>>w[i];
solve();
int re=inf;
for(int i=0;i<d;i++)
{
re=min(re,di[w[i]]);
}
cout<<re<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: