• 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));       
    }
    

      

  • 相关阅读:
    Selenium使用SauceLab示例
    Pandas读取多个csv文件
    基于BDD的跨语言SDK测试
    使用lxml解析HTML
    PyYAML中自定义tag标签获取环境变量值
    求职指导
    Python中如何理解闭包
    如何理解if __name__ == '__main__'
    Python实现二叉树最近公共祖先节点
    nvidia docker安装
  • 原文地址:https://www.cnblogs.com/HpuAcmer/p/2360381.html
Copyright © 2020-2023  润新知