hdu 2066 一个人的旅行

简介: 点击打开链接hdu 2066 思路:最短路+Dijkstra 分析:题目给定的起点有s个,终点有d个。要求找到从起点到这些终点最短的路径。很显然只要枚举起点然后比较最后得到最小的值。

点击打开链接hdu 2066


思路:最短路+Dijkstra
分析:题目给定的起点有s个,终点有d个。要求找到从起点到这些终点最短的路径。很显然只要枚举起点然后比较最后得到最小的值。

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 1010
#define INF 0xFFFFFFF

int t , s , d;
int sCity[MAXN];
int dCity[MAXN];
int dis[MAXN];
int vis[MAXN];
int value[MAXN][MAXN];

void init(){
   for(int i = 1 ; i < MAXN ; i++){
      for(int j = 1 ; j < MAXN ; j++)
        value[i][j] = INF;
   }
}

void Dijkstra(int s){
    int pos;
    memset(vis , 0 , sizeof(vis));
    for(int i = 1 ; i < MAXN; i++)
       dis[i] = INF;
    dis[s] = 0;
    for(int i = 1 ; i < MAXN ; i++){
       pos = -1;
       for(int j = 1 ; j < MAXN ; j++){
          if(!vis[j] && (pos == -1 || dis[j] < dis[pos]))
            pos = j;
       } 
       if(pos == -1)
          break;
       vis[pos] = 1;
       for(int j = 1 ; j < MAXN ; j++){
          if(!vis[j] && dis[j] > dis[pos] + value[pos][j])
            dis[j] = dis[pos] + value[pos][j];
       }
    }
}

int main(){
   int a , b , v , ans;
   while(scanf("%d%d%d" , &t , &s , &d) != EOF){
      init();
      for(int i = 0 ; i < t ; i++){
         scanf("%d%d%d" , &a , &b , &v);
         if(value[a][b] > v)
           value[a][b] = value[b][a] = v;
      }
      for(int i = 0 ; i < s ; i++)
         scanf("%d" , &sCity[i]);
      for(int i = 0 ; i < d ; i++)
         scanf("%d" , &dCity[i]);
      ans = INF;
      /*枚举起点*/
      for(int i = 0 ; i < s ; i++){
         Dijkstra(sCity[i]);
         for(int j = 0 ; j < d ; j++)/*枚举终点*/
            ans = ans < dis[dCity[j]] ? ans : dis[dCity[j]];
      }
      printf("%d\n" , ans);
   }
   return 0;
}



目录
相关文章
|
5天前
|
Java
hdu-2066-一个人的旅行(dijkstra)
hdu-2066-一个人的旅行(dijkstra)
10 0
畅通工程 HDU - 1232
畅通工程 HDU - 1232
57 0
LeetCode 1436. 旅行终点站
给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] = [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 cityBi 。
65 0
|
机器学习/深度学习
洛谷P5022 旅行(基环树+断环法)
洛谷P5022 旅行(基环树+断环法)
97 0
HDU - 6290: 奢侈的旅行
HDU - 6290: 奢侈的旅行
86 0
HDU-2066,一个人的旅行(Dijkstra)
HDU-2066,一个人的旅行(Dijkstra)
|
算法
HDU - 2063: 过山车
HDU - 2063: 过山车
113 0