zoukankan      html  css  js  c++  java
  • pku1502 Subway

    http://poj.org/problem?id=2502

    图论,最短路,dijkstra

    交大模板

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <math.h>
     4 #define N 234
     5 
     6 float dis[N], g[N][N];
     7 int n, x[N], y[N];
     8 bool v[N];
     9 const float inf = 12345;
    10 
    11 float min(float x, float y)
    12 {
    13     return x<y? x: y;
    14 }
    15 
    16 void dijkstra()
    17 {
    18     for(int i=1; i<=n; i++)
    19     {
    20         dis[i] = inf;
    21     }
    22     dis[1] = 0;
    23     memset(v, 0, sizeof(v));
    24     for(int i=1; i<=n; i++)
    25     {
    26         int mark = -1;
    27         float mindis = inf;
    28         for(int j=1; j<=n; j++)
    29         {
    30             if(!v[j] && dis[j] < mindis)
    31             {
    32                 mindis = dis[j];
    33                 mark = j;
    34             }
    35         }
    36         v[mark] = 1;
    37         for(int j=1; j<=n; j++)
    38         {
    39             dis[j] = min(dis[j], dis[mark] + g[mark][j]);
    40         }
    41     }
    42 }
    43 
    44 float d(int i, int j)
    45 {
    46     return (float)sqrt( (double)(x[i]-x[j])*(x[i]-x[j]) + (double)(y[i]-y[j])*(y[i]-y[j]) );
    47 }
    48 
    49 int main()
    50 {
    51     int i, j;
    52     float temp;
    53     for(i=0; i<N; i++)
    54     {
    55         for(j=0; j<N; j++)
    56         {
    57             g[i][j] = inf;
    58         }
    59     }
    60     scanf("%d%d%d%d", x+1, y+1, x+2, y+2);
    61     g[1][2] = g[2][1] = min(g[1][2], d(1, 2)*0.006);
    62     i = 3;
    63     while(~scanf("%d%d", x+i, y+i), x[i]+1)
    64     {
    65         for(j=0; j<i; j++)
    66         {
    67             g[i][j] = g[j][i] = min(g[i][j], d(i, j)*0.006);
    68         }
    69         for(i=i+1; scanf("%d%d", x+i, y+i), x[i]+1||y[i]+1; i++)
    70         {
    71             j = i - 1;
    72             g[i][j] = g[j][i] = min(g[i][j], d(i, j)*0.0015);
    73             for(j=0; j<i; j++)
    74             {
    75                 g[i][j] = g[j][i] = min(g[i][j], d(i, j)*0.006);
    76             }
    77         }
    78     }
    79     n = i - 1;
    80     dijkstra();
    81     printf("%.0f\n", dis[2]);
    82     return 0;
    83 }
  • 相关阅读:
    Git教程
    Android 使用AIDL调用外部服务
    Android 不同文件名介绍
    详解Android首选项框架ListPreference
    Android 使用Telephony API
    Android ImageButton android:scaleType
    Java实现二维码QRCode的编码和解码
    java二维码生成与解析代码实现
    Java中转UTC时间字符串(含有T Z)为local时间
    http://www.yihaomen.com/article/java/302.htm
  • 原文地址:https://www.cnblogs.com/yuan1991/p/pku1502.html
Copyright © 2011-2022 走看看