zoukankan      html  css  js  c++  java
  • POJ 2502 最短路

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

    同一条地铁线上的站点相邻点间按照v2建边,然后所有点之间按照v1更新建边,所有的边都是双向边,both directions。

    然后直接跑dij就好了,防止因为重复的站点多建了同样的点,把上限开到了500,AC。

    一个小bug是因为数组开了500,然后初始化时访问了500导致越界,,,把其他位置的地址更改了检查了半天,衰,以后还是多开几十好点。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<queue>
     4 #include<cmath>
     5 #include<cstring>
     6 using namespace std;
     7 #define inf 999999999
     8 double e[500][500];
     9 struct node
    10 {
    11     int x,y;
    12 }P[500];
    13 double dis(node A,node B)
    14 {
    15     double d1=(A.x-B.x)*(A.x-B.x),d2=(A.y-B.y)*(A.y-B.y);
    16     return sqrt(d1+d2);
    17 }
    18 double dij(int N)
    19 {
    20  double d[505];
    21  bool vis[505];
    22  memset(vis,0,sizeof(vis));
    23  for(int i=1;i<=N;++i) d[i]=inf;
    24  d[1]=0;
    25  for(int i=1;i<=N;++i)
    26  {
    27      int u;
    28      double minv=inf;
    29      for(int j=1;j<=N;++j) if(!vis[j]&&d[j]<minv) minv=d[u=j];
    30      vis[u]=1;
    31      for(int j=1;j<=N;++j)
    32         if(!vis[j]&&d[j]>d[u]+e[u][j])
    33         d[j]=d[u]+e[u][j];
    34  }
    35  return d[2];
    36 }
    37 int main()
    38 {
    39     freopen("in.txt","r",stdin);
    40     int N,M,i,j,k;
    41     double v1=10000.0/60;
    42     double v2=40000.0/60;
    43     while(cin>>P[1].x>>P[1].y>>P[2].x>>P[2].y){
    44         int p=2,l=3,a,b;
    45        for(i=1;i<500;++i)
    46             for(j=1;j<500;++j)
    47         e[i][j]=(i==j?0:inf);
    48         while(cin>>a>>b){
    49             if(a==-1&&b==-1) {l=p+1;continue;}
    50             ++p;
    51             P[p].x=a;
    52             P[p].y=b;
    53             if(p>l) e[p-1][p]=e[p][p-1]=min(e[p][p-1],dis(P[p],P[p-1])/v2);
    54         }
    55 
    56 
    57         for(i=1;i<=p;++i)
    58             for(j=i+1;j<=p;++j)
    59                  e[i][j]=e[j][i]=min(e[i][j],dis(P[i],P[j])/v1);
    60         printf("%.0f
    ",dij(p));
    61     }
    62     return 0;
    63 }
  • 相关阅读:
    经典排序算法
    浅谈C++继承
    进程间通信
    我在其它博客写文章
    git 版本回退
    vmware machine 虚拟机无法启动 Credential Guard 或 Device Guard
    我的头像制作过程
    vs安装qt5后打开qt4创建的 .pro 文件提示找不到头文件的解决方法
    [转]手动安装 Eclipse 插件 Viplugin
    装好 JDK 配置环境变量
  • 原文地址:https://www.cnblogs.com/zzqc/p/7364765.html
Copyright © 2011-2022 走看看