zoukankan      html  css  js  c++  java
  • Subway POJ

    题意:给出地铁线  起点和 终点  坐地铁速度为v2  走路为v1 求起点到终点的最短距离  (答案需要四舍五入这里坑了好久) 

     拿给出的地铁站点 和起点终点建边即可  然后跑个迪杰斯特拉

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 using namespace std;
     6 const double v1=10000.0/60;
     7 const double v2=40000.0/60;
     8 int n;
     9 const int maxn=300+5;
    10 double dist[maxn];
    11 double cost[maxn][maxn];
    12 int vis[maxn];
    13 const double INF=1e30;
    14 
    15 struct Node{
    16     double x,y;
    17 }node[maxn];
    18 
    19 double dis(const Node&a,const Node&b){
    20     return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    21 }
    22 
    23 void Dijkstra(){
    24     for(int i=1;i<=n;i++){
    25         dist[i]=INF;
    26     }
    27     memset(vis,0,sizeof(vis));
    28     dist[1]=0;
    29     for(int j=0;j<n;j++){
    30         int k=-1;
    31         double minnum=INF;
    32         for(int i=1;i<=n;i++){
    33             if(!vis[i]&&dist[i]<minnum){
    34                 minnum=dist[i];
    35                 k=i;
    36             }
    37         }
    38         if(k==-1)break;
    39     vis[k]=1;
    40     for(int i=1;i<=n;i++){
    41         if(!vis[i]&&dist[k]+cost[k][i]<dist[i]){
    42             dist[i]=dist[k]+cost[k][i];
    43     }
    44     }
    45 }
    46 }
    47 int main(){
    48     while(scanf("%lf%lf%lf%lf",&node[1].x,&node[1].y,&node[2].x,&node[2].y)==4){
    49         n=2;
    50     int cnt1=3;
    51         for(int i=1;i<maxn;i++)
    52             for(int j=1;j<maxn;j++)
    53                 if(i!=j)cost[i][j]=INF;
    54                 else cost [i][j]=0;
    55         int x,y;
    56         bool ok=0;
    57         
    58         while(scanf("%d%d",&x,&y)==2){
    59             if(x==-1&&y==-1){
    60             ok=0;
    61                 continue;
    62             }
    63             n++;
    64             node[n].x=x;
    65             node[n].y=y;
    66             if(ok){
    67                 cost[n][n-1]=cost[n-1][n]=min(cost[n][n-1],dis(node[n],node[n-1])/v2);
    68             }
    69             ok=1;
    70         }
    71         for(int i=1;i<=n;i++)
    72             for(int j=1;j<=n;j++){
    73                cost[i][j]=cost[j][i]=min(cost[i][j],dis(node[i],node[j])/v1);
    74             }
    75         Dijkstra();
    76     cout << int( dist[2] + 0.5 );
    77     }
    78     return 0;
    79 }
  • 相关阅读:
    SCCM2012 R2实战系列之四:初始化配置
    SCCM 2012 R2实战系列之一:SQL安装
    hdu 1242(bfs)
    hdu 1728(bfs)
    hdu 1253(bfs)
    hdu 3661
    hdu 1072(bfs)
    AC模版
    hdu 1010(dfs)
    poj 3628(01_page, dfs)
  • 原文地址:https://www.cnblogs.com/ttttttttrx/p/9742421.html
Copyright © 2011-2022 走看看