您的位置:首页 > 其它

HDU 2066 一个人的旅行

2012-09-08 20:32 281 查看
#include<iostream>
using namespace std;

const int INF=0x3fffffff;
int map[1010][1010];
int used[1010];
int dis[1010];

void init()
{
int i,j;
for(i=0;i<=1000;i++)
{
dis[i]=INF;
for(j=0;j<=1000;j++)
map[i][j]=INF;
}
memset(used,0,sizeof(used));
}

void dijkstra(int n)
{
int minNode;
int min;
int i,j;
//dis[start]=0;
for(i=1;i<=n;i++)
{
min=INF;
for(j=1;j<=n;j++)
{
if(!used[j] && dis[j]<min)
{
min=dis[j];
minNode=j;
}
}
used[minNode]=1;

for(j=1;j<=n;j++)
if(!used[j] && dis[minNode] + map[minNode][j] < dis[j])
dis[j]=dis[minNode] + map[minNode][j];
}
//return dis[end];
}
main()
{
int t,s,d;
int a,b,time;
int sa,sb;
int n,i;
int min;
int dest[1010];
while(scanf("%d%d%d",&t,&s,&d)!=EOF)
{
init();
n=-1;
while(t--)
{
scanf("%d%d%d",&a,&b,&time);
if(time<map[a][b])///////////坑人坑人,没有判断就wrong
map[a][b]=map[b][a]=time;
if(b>n) n=b;
if(a>n) n=a;
}
while(s--)
{
scanf("%d",&sa);
dis[sa]=0;
//map[0][sa]=map[sa][0]=0;
}
i=0;
sb=d;
while(sb--)
{
scanf("%d",&dest[i++]);
}
min=INF;
int k;
dijkstra(n);
for(i=0;i<d;i++)
{
if( dis[ dest[i] ]< min)
min=dis[ dest[i] ];
}
cout<<min<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: