HDU-2066,一个人的旅行(Dijkstra)

简介: HDU-2066,一个人的旅行(Dijkstra)

Problem Description:


虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车(好可怜啊~)。


Input:


输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个;

接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b 之间可能有多条路)

接着的第T+1行有S个数,表示和草儿家相连的城市;

接着的第T+2行有D个数,表示草儿想去地方。


Output:


输出草儿能去某个喜欢的城市的最短时间。


Sample Input:


6 2 3


1 3 5


1 4 7


2 8 12


3 8 4


4 9 12


9 10 2


1 2


8 9 10


Sample Output:


9


程序代码:


#include<stdio.h>
#include<string.h>
#define INF 0x3f3f3f
#define N 1001
int map[N][N],dis[N],book[N];
int u,q;
void Dijkstra(int v)
{
  int minn,i,j,k;
  memset(book,0,sizeof(book));
  for(i=1;i<=q;i++)
    dis[i]=map[v][i];
  book[v]=1;
  dis[v]=0;
  for(i=0;i<q;i++)
  {
    minn=INF;
    for(j=1;j<=q;j++)
    {
      if(book[j]==0&&dis[j]<minn)
      {
        u=j;
        minn=dis[j];
      }
    }
    book[u]=1;
    for(k=1;k<=q;k++)
    {
      if(map[u][k]<INF)
      {
        if(dis[k]>dis[u]+map[u][k])
          dis[k]=dis[u]+map[u][k];
      }
    }
  }
}
int main()
{
  int t,s,d,a,b,time,i,j,k;
  int city[N],love[N];
  while(scanf("%d %d %d",&t,&s,&d)!=EOF)
  {
    q=0;
    for(i=1;i<=1000;i++)
    {
      for(j=1;j<=1000;j++)
      {
        if(i==j)
          map[i][j]=0;
        else
          map[i][j]=INF;
      }
    }
    for(i=0;i<t;i++)
    {
      scanf("%d %d %d",&a,&b,&time);
      if(map[a][b]>time)
        map[a][b]=map[b][a]=time;
      if(a>q)
        q=a;
      if(b>q)
        q=b;
    }
    for(i=0;i<s;i++)
      scanf("%d",&city[i]);
    for(j=0;j<d;j++)
      scanf("%d",&love[j]);
    int ans=INF;
    for(i=0;i<s;i++)
    {
      Dijkstra(city[i]);
      for(j=0;j<d;j++)
      {
        if(dis[love[j]]<ans)
          ans=dis[love[j]];
      }
    }
    printf("%d\n",ans);
  }
  return 0;
}


相关文章
|
1月前
lanqiao oj 1121 蓝桥公园(floyd)
lanqiao oj 1121 蓝桥公园(floyd)
41 0
|
6月前
hdu-2066-一个人的旅行(dijkstra)
hdu-2066-一个人的旅行(dijkstra)
39 0
|
6月前
|
Java
hdu-1869-六度分离(dijkstra)
hdu-1869-六度分离(dijkstra)
38 0
洛谷 P1141 01迷宫
洛谷 P1141 01迷宫
79 0
洛谷P1605:迷宫
洛谷P1605:迷宫
84 0
|
存储 定位技术 C++
【PTA】龙舌兰酒吧 (BFS求双源最短路)
【PTA】龙舌兰酒吧 (BFS求双源最短路)
167 0
【PTA】龙舌兰酒吧 (BFS求双源最短路)
|
测试技术
HDU-1232,畅通工程(并查集)
HDU-1232,畅通工程(并查集)
HDU-1874,畅通工程续(Floyd最短路)
HDU-1874,畅通工程续(Floyd最短路)