zoukankan      html  css  js  c++  java
  • 最短路 一个人的旅行

                          最短路一个人的旅行

    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
     
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<string>
     5 #include<algorithm>
     6 
     7 using namespace std;
     8 
     9 #define MAX 0x3f3f3f3f
    10 
    11 int road,link,want,total;
    12 int map[1005][1005],linkarr[1005],wantarr[1005],dis[1005];
    13 bool visit[1005];
    14 
    15 void Dijkstra(int start)///起始点
    16 {
    17     int temp,k;
    18     memset(visit,0,sizeof(visit));
    19 
    20     for(int i=1;i<=total;++i)
    21         dis[i]=map[start][i];
    22 
    23     dis[start]=0;
    24     visit[start]=1;
    25 
    26     for(int i=1;i<=total;++i)
    27     {
    28         temp=MAX;
    29         for(int j=1;j<=total;++j)
    30             if(!visit[j]&&dis[j]<temp)
    31                 temp=dis[k=j];
    32 
    33         visit[k]=1;
    34         for(int j=1;j<=total;++j)
    35             if(!visit[j]&&dis[k]+map[k][j]<dis[j])
    36                 dis[j]=dis[k]+map[k][j];
    37     }
    38 }
    39 
    40 int main()
    41 {
    42     int x,y,cost,minn,answer;
    43     while(scanf("%d%d%d",&road,&link,&want)!=EOF)
    44     {
    45         total=0;
    46         memset(map,MAX,sizeof(map));
    47 
    48         for(int i=1;i<=road;++i)
    49         {
    50             scanf("%d%d%d",&x,&y,&cost);
    51             if(cost<map[x][y])
    52                 map[x][y]=map[y][x]=cost;
    53 
    54             total=max(total,max(x,y));
    55         }
    56 
    57         for(int i=1;i<=link;++i) //相连的城市
    58             scanf("%d",&linkarr[i]);
    59 
    60         for(int i=1;i<=want;++i) //目的地
    61             scanf("%d",&wantarr[i]);
    62 
    63         answer=MAX;
    64         for(int i=1;i<=link;++i) //linkarr数组中所有元素中到达目的地最短的路
    65         {
    66             Dijkstra(linkarr[i]);
    67             minn=MAX;
    68             for(int j=1;j<=want;++j) //linkarr[i]中可以到达的目的地中最短
    69                 if(dis[wantarr[j]]<minn)
    70                     minn=dis[wantarr[j]];
    71             if(answer>minn)
    72                 answer=minn;
    73         }
    74 
    75         printf("%d
    ",answer);
    76     }
    77     return 0;
    78 }
     
  • 相关阅读:
    TensorFlow中的基本概念
    理解 tf.Variable、tf.get_variable以及范围命名方法tf.variable_scope、tf.name_scope
    深度神经网络关键词解释
    [python] os.path.join() 与 sys.path
    Git 遇到的坑
    [转] 资深程序员得到的职场经验教训
    VS CODE 快捷键
    解决VS Code使用code runner开发Python乱码问题
    熵,条件熵,互信息,交叉熵
    Visual Studio Code 支持TensorFlow配置支持
  • 原文地址:https://www.cnblogs.com/moqitianliang/p/4685317.html
Copyright © 2011-2022 走看看