zoukankan      html  css  js  c++  java
  • POJ 2502(floyd)

           从家到学校,可以步行,可以地铁,最少时间?典型的最短路径。令人纠结的是输入的处理非常的麻烦啊!

            迄今为止,我感觉输入最麻烦的一个吧!!!

           注意三点:

           一、每两点可达,即使没有地铁,也可以步行的;

           二、相邻地铁可达,不相邻不用管(换乘);

           三、地铁线不一定是直的。(这个没注意到,WA了好几次)

    代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<string.h>
    
    typedef struct point
    {
      double x,y;       
    } Point;
    Point p[205];
    
    double dis[205][205]; 
    double distance(Point a,Point b);//计算两点间距离 
    
    double floyd(int tot);
    
    int main()
    {
      double ax,bx;
      int i,j,k,stop;
      memset(dis,0,sizeof(dis));  
        scanf("%lf%lf%lf%lf",&p[0].x,&p[0].y,&p[1].x,&p[1].y);
       dis[0][1] = dis[1][0] = distance(p[0],p[1]);
      
       i = 2;
       while(1)  
       {
          if(scanf("%lf%lf",&ax,&bx) != 2) break; 
          k = i ;
          do
          { 
           
             p[i].x = ax ; p[i].y = bx ;   
             for(j = 0 ; j < i ; ++j)//计算新的点到其余各点的距离 
              dis[i][j] = dis[j][i] = distance(p[i],p[j]);
             ++i;
             
          }while(scanf("%lf%lf",&ax,&bx)&&(ax != -1 || bx != -1));
              
          for(j = k ; j < i-1 ; ++j)//地铁,距离缩小4倍,因为速度快4倍 
           dis[j][j+1] = dis[j+1][j] = distance(p[j],p[j+1])*0.25;
           
       }
    
      stop = i;
      printf("%.0lf\n",0.006*floyd(stop)); //换算成时间 
      //system("pause");
      return 0;    
    }
    
    double floyd(int tot)
    {
      int i,j,k;
      double t;
      
      for(k = 0 ; k < tot ; ++k)
       for(i = 0 ; i < tot ; ++i)
        for(j = 0 ; j < tot ; ++j)      
        {
           if(dis[i][k] && dis[k][j])
           {
             t = dis[i][k] + dis[k][j];
             if(t < dis[i][j])
             dis[i][j] = t;             
           }               
        }
        return dis[0][1];
    }
    
    double distance(Point a,Point b)
    {
      return sqrt( (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));       
    }
    

      

  • 相关阅读:
    循环神经网络
    相似度计算(余弦距离/欧式距离)
    最常见Linux操作
    注意力机制总结
    随机打乱数组算法、蓄水池算法
    6.1 数据结构---树(遍历)
    Node.js调用C/C++
    linux中nmcli命令详解
    stylus入门使用方法
    webpack CommonsChunkPlugin详细教程
  • 原文地址:https://www.cnblogs.com/HpuAcmer/p/2360381.html
Copyright © 2011-2022 走看看