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

    个人心得:不得不承认,有关平面图形空间感啥还是有很多不足,因为不足所以都不能很好把问题转化,更不能知道如何去想出方法,很无奈呀,得多想想这些方面了;

    这一题一是不会很好的运用最短路算法,二是没能够很好的把问题转化。

    后面看了题解才发现可以这样,可以将自己城镇到相邻的城镇也变成一条路径,这样求到所要去的地方就一目了然,

    变成了0到所有想去的了,就完美转变为求0到N的最短路问题了,佩服,这方面的思维还是太水。

    虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^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<cmath>
     4 #include<cstring>
     5 #include<iomanip>
     6 #include<algorithm>
     7 using namespace std;
     8 const long long inf=99999999;
     9 int n,m,d;
    10 int flag;
    11 const int maxn=1111;
    12 int country[maxn][maxn];
    13 int book[maxn];
    14 int aim[maxn];
    15 int dis[maxn];
    16 void init()
    17 {
    18     for(int i=0;i<maxn;i++)
    19         for(int j=0;j<maxn;j++)
    20           if(i==j) country[i][j]=0;
    21     else country[i][j]=inf;
    22 
    23 }
    24 void Dijkstra()
    25 {
    26     memset(book,0,sizeof(book));
    27     for(int i=0;i<=flag;i++) dis[i]=country[0][i];
    28     book[0]=1;
    29     for(int i=0;i<=flag;i++)
    30     {
    31         int mina=inf;
    32         int k;
    33         for(int j=1;j<=flag;j++)
    34         {
    35             if(!book[j]&&dis[j]<mina)
    36             {
    37                 mina=dis[j];
    38                 k=j;
    39             }
    40     }
    41     book[k]=1;
    42     for(int j=0;j<=flag;j++)
    43         if(!book[j]&&dis[j]>dis[k]+country[k][j])
    44            dis[j]=dis[k]+country[k][j];
    45 
    46 }
    47 }
    48 int main()
    49 {
    50     while(cin>>n>>m>>d){
    51             init();
    52             flag=0;
    53             int next[maxn];
    54             int x,y,z;
    55             for(int i=1;i<=n;i++){
    56                 cin>>x>>y>>z;
    57                 flag=max(x,flag);
    58                 flag=max(flag,y);
    59                 if(z<country[x][y])
    60                     country[x][y]=country[y][x]=z;
    61             }
    62             for(int i=1;i<=m;i++){
    63               cin>>next[i];
    64               country[0][next[i]]=country[next[i]][0]=0;
    65             }
    66             for(int i=1;i<=d;i++)
    67                 cin>>aim[i];
    68                 Dijkstra();
    69                 int sum=inf;
    70               for(int i=1;i<=d;i++)
    71                 sum=min(sum,dis[aim[i]]);
    72               cout<<sum<<endl;
    73 
    74     }
    75 
    76     return 0;
    77 }
  • 相关阅读:
    Jquery小技巧
    搭建Eclipse+MyEclipse+Tomcat开发环境
    ASP.NET:就是喜欢Web Form,就是喜欢拖控件(二)
    ASP.NET:就是喜欢Web Form,就是喜欢拖控件(一)
    程序员能力矩阵 你属于哪一层?
    WEB
    ASP.NET:就是喜欢Web Form,就是喜欢拖控件(四)
    ASP.NET:就是喜欢Web Form,就是喜欢拖控件(五)
    jQuery:简单6行代码实现tab效果
    iPhone程序开发新人FAQ
  • 原文地址:https://www.cnblogs.com/blvt/p/7323599.html
Copyright © 2011-2022 走看看