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

    这题最重要的就是设置一个超级原点,即他的城镇,然后连接超级原点到相邻的城市的距离为0 ,接下来就是套用模板了,哦,对了,要优化一下,不然貌似数据蛮大的,
    View Code
    1 #include"stdio.h"
    2 #include"math.h"
    3 #include"string.h"
    4 #define maxn 0x7ffffff
    5
    6 int map[1001][1001],s,t,n,m;
    7 int alls;
    8 int dist[1001];
    9
    10 void dij()
    11 {
    12 int visit[1001],i,j,k,minn;
    13 for(i=0;i<=n;i++)
    14 {
    15 visit[i] = 0;
    16 dist[i] = map[s][i];
    17 }
    18
    19 visit[s] = 1;
    20 for(i=1;i<=n;i++)
    21 {
    22 j = s;
    23 minn = maxn;
    24 for(k=0;k<=n;k++)
    25 {
    26 if(!visit[k] && dist[k]<minn)
    27 {
    28 minn = dist[k];
    29 j = k;
    30 }
    31 }
    32 visit[j] = 1;
    33 for(k=0;k<=n;k++)
    34 {
    35 if(!visit[k] && dist[k]>map[j][k]+dist[j] && map[j][k]<maxn)
    36 {
    37 dist[k] = map[j][k] + dist[j];
    38 }
    39 }
    40 }
    41 }
    42
    43 int main()
    44 {
    45 int i,j,k,city,a,b,c,link[1001],home,gold;
    46
    47 while(scanf("%d%d%d",&m,&home,&gold)!=EOF)
    48 {
    49 for(i=0;i<=1000;i++)
    50 {
    51 for(j=0;j<=1000;j++)
    52 {
    53 map[i][j] = maxn;
    54 }
    55 }
    56 n = 1000;
    57 for(i=1;i<=m;i++)
    58 {
    59 scanf("%d%d%d",&a,&b,&c);
    60 if(map[a][b]>c)
    61 {
    62 map[a][b] = c;
    63 map[b][a] = c;
    64 if(n<a)n = a;
    65 if(n<b)n = b;
    66 }
    67
    68
    69 }
    70 s = 0,t = n;
    71 for(i=1;i<=home;i++)//设置0为超级原点
    72 {
    73 scanf("%d",&c);
    74 map[0][c] = 0;
    75 }
    76 dij();
    77 c = maxn;
    78 for(i=1;i<=gold;i++)
    79 {
    80 scanf("%d",&a);
    81 c = c>dist[a]?dist[a]:c;
    82 }
    83 printf("%d\n",c);
    84 }
    85 return 0;
    86 }

  • 相关阅读:
    [置顶] MySQL Cluster初步学习资料整理--安装部署新特性性能测试等
    ubuntu下设置开机自启动项
    【JSP】Cookie的使用及保存中文,并用Cookie实现购物车功能
    汉语-词语:笑面虎
    汉语-词语:阴险
    汉语-词语:奸猾
    汉语-词语:奸诈
    汉语-词语:厚道
    汉语-词语:忠厚
    汉语-词语:狡猾
  • 原文地址:https://www.cnblogs.com/yuecxl/p/2035907.html
Copyright © 2011-2022 走看看