您的位置:首页 > 其它

hdu 2066 一个人的旅行(最短路问题)

2013-08-02 20:12 267 查看
最短路·································

类似的问题还有好多不会!慢慢学吧!!!!、

进步,哪怕每天一点也行!

(恋爱不是小事,确实小事的积累!(听着酷狗音乐台说的,很有道理))

#include<stdio.h>

#include<string.h>

#define MAX 10000000

int map[1010][1010];

int main()

{

int t,s,d,a,b,time,i,qidian[1010],zhongdian[1010],juli[1010],v[1010],j;

while(scanf("%d%d%d",&t,&s,&d)!=EOF)

{

for(i=0;i<1010;i++)

for(j=0;j<1010;j++)

{

if(i==j)

map[i][j]=0;

else

map[i][j]=MAX;

}

for(i=0;i<t;i++)

{

scanf("%d%d%d",&a,&b,&time);

if(map[a][b]>time)//防止出现重边

{

map[a][b]=time;

map[b][a]=time;

}

}

for(j=0;j<s;j++)

{

scanf("%d",&qidian[j]);

map[qidian[j]][0]=0;

map[0][qidian[j]]=0;

}

for(i=0;i<d;i++)

scanf("%d",&zhongdian[i]);

for(i=0;i<1010;i++)

juli[i]=MAX;

juli[0]=0;

memset(v,0,sizeof(v));

for(i=0;i<=1000;i++)

{

int w,m=MAX;

for(j=0;j<=1000;j++)

{

if(!v[j]&&juli[j]<=m)

m=juli[w=j];

}

v[w]=1;

for(j=0;j<=1000;j++)

{

if(juli[j]>juli[w]+map[w][j])

juli[j]=juli[w]+map[w][j];

}

}

int min=MAX;

for(i=0;i<d;i++)

if(juli[zhongdian[i]]<min)

min=juli[zhongdian[i]];

printf("%d\n",min);

}

return 0;

}

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: