zoukankan      html  css  js  c++  java
  • HDU

    题目链接:http://poj.org/problem?id=2502

    分析:

    告诉一些地铁线路,从起点到终点,中途可以步行,可以坐地铁,找一条最短的路

    主要是把图建立好,然后直接dijkstra或者floyd,因为速度不同,所以转化成求最短的时间

    题目大致处理方法就是将每个地铁站点与相邻的站点用时先算出,然后再算各个点之间步行耗时,最后一个dijkstra。 

    *:scanf的返回值由后面的参数决定scanf("%d%d",&a,&b);

    如果a和b都被成功读入,那么scanf的返回值就是2
    如果只有a被成功读入,返回值为1
    如果a和b都未被成功读入,返回值为0
    如果遇到错误或遇到end of file,返回值为EOF.
    且返回值为int型.

    Sample Input
    
    0 0 10000 1000
    0 200 5000 200 7000 200 -1 -1 
    2000 600 5000 600 10000 600 -1 -1

    Sample Output 21

    **********************************************

      1 #include<iostream>
      2 #include<algorithm>
      3 #include<cstdio>
      4 #include<cstring>
      5 #include<queue>
      6 #include<stdlib.h>
      7 #include<map>
      8 #include<cmath>
      9 
     10 using namespace std;
     11 
     12 #define N 2500
     13 #define INF 0x3f3f3f3f
     14 
     15 double v1=40000.0/60,v2=10000.0/60;
     16 double maps[N][N], dist[N];
     17 int vis[N], k=2;;
     18 
     19 struct node
     20 {
     21     int x,y;
     22 } p[N];
     23 
     24 node s,e;
     25 
     26 double Len(node a,node b)
     27 {
     28     double x=a.x-b.x;
     29     double y=a.y-b.y;
     30     double len=sqrt(x*x+y*y);
     31     return len;
     32 }
     33 
     34 void Init()
     35 {
     36     for(int i=0; i<N; i++)
     37     {
     38         for(int j=0; j<N; j++)
     39             maps[i][j]=(i==j)?0:INF;
     40         dist[i]=INF;
     41     }
     42 }
     43 
     44 void dij()
     45 {
     46     int i,j;
     47 
     48     for(i=0; i<k; i++)
     49         dist[i]=maps[0][i];
     50 
     51     vis[0]=1;
     52 
     53     for(i=0; i<k; i++)
     54     {
     55         double Min=INF;
     56         int index=-1;
     57         for(j=0; j<k; j++)
     58         {
     59             if(vis[j]==0&&Min>dist[j])
     60             {
     61                 Min=dist[j];
     62                 index=j;
     63             }
     64         }
     65         if(index==-1) break;
     66         vis[index]=1;
     67 
     68         for(j=0;j<k;j++)
     69             if(dist[j]>maps[index][j]+dist[index]&&vis[j]==0)
     70             dist[j]=maps[index][j]+dist[index];
     71     }
     72 }
     73 
     74 int main()
     75 {
     76     int x,y,f=0, i,j;
     77 
     78     scanf("%d %d", &s.x,&s.y);
     79     scanf("%d %d",&e.x,&e.y);
     80     p[0]=s;
     81     p[1]=e;
     82 
     83     memset(vis,0,sizeof(vis));
     84     memset(maps,0,sizeof(maps));
     85     Init();
     86 
     87     dist[0]=0;
     88     vis[0]=1;
     89 
     90     while(scanf("%d %d",&x,&y)==2)/*/
     91     {
     92         if(x==-1&&y==-1)
     93         {
     94             f=0;
     95             continue ;
     96         }
     97 
     98         p[k].x=x;
     99         p[k].y=y;
    100 
    101         if(f==1)
    102             maps[k][k-1]=maps[k-1][k]=min(maps[k][k-1], Len(p[k],p[k-1])/v1);
    103         f=1;
    104         k++;
    105     }
    106     for(i=0; i<k; i++)
    107         for(j=0; j<k; j++)
    108             maps[i][j]=maps[j][i]=min(maps[i][j], Len(p[i],p[j])/v2);
    109 
    110     dij();
    111 
    112     printf("%.0f
    ", dist[1]);
    113 
    114     return 0;
    115 }
  • 相关阅读:
    Visio画出的图,裁剪成固定大小再添加马赛克的方法
    单张PPT转成单张PDF的PDF文件怎么设置打印出一页纸有6页PPT
    MVC下载电子表格到本地((导出表格4-4)
    获取配置文件(导出表格4-3)
    获取随机字符串(导出表格4-2)
    ExcelHelper 电子表格帮助类(导出表格4-1)
    二、操作NPOI_从数据库中导出数据到Excel_支持.xls格式
    一、操作NPOI从Excel中导入数据到SqlServer数据库中_xls格式
    Fetch(Promise微队列) 增删改查
    C#获取枚举的描述
  • 原文地址:https://www.cnblogs.com/weiyuan/p/5749228.html
Copyright © 2011-2022 走看看