• POJ2502 Subway -DIJKSTRA最短路练习


    题目大意:有个小朋友要从家里到学校,可以通过走路或者乘地铁的方式到达,走路每小时10KM,乘地铁每小时40KM,他可以走路+换乘地铁等多种方式到达,给出家,地铁站和学校的坐标,请问他到达学校的最短时间是多少分钟(四舍五入),假设没有等待地铁时间。

    题解:本题是一道要转换模型的最短路题,要将距离转化成时间,将家,每个地铁站,学校转换成点,最后求家到学校的最短时间,需要注意的是,地铁线不是直的,譬如1~2,2~3是距离/40KM/H,但是1~3不是。代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    const int maxn=210;
    const double inf=100000000.0;
    struct point{
    	int x,y;
    };
    double a[maxn][maxn],d[maxn];
    int p[maxn];
    struct point e[maxn];
    
    double dist(int x1,int y1,int x2,int y2){
    	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    }
    
    int main(){
    	int i,j,k,m,n;
    	int sx,sy,tx,ty;
    	int x,y,s;
    	scanf("%d%d%d%d",&sx,&sy,&tx,&ty);
    	e[1].x=sx;e[1].y=sy;
    	n=1;s=0;	
    	while(scanf("%d%d",&x,&y)!=EOF){
    		if(x==-1 && y==-1){
                s=0; 
    			continue;
            }
    		n++;
    		e[n].x=x;e[n].y=y;
    		if(s){
                a[n][n-1]=dist(e[n-1].x,e[n-1].y,e[n].x,e[n].y)*60/40000;            
                a[n-1][n]=a[n][n-1];
            }
    		s=1;
    	}
    	n++;
    	e[n].x=tx;e[n].y=ty;
    	double ds;	
    	for(i=1;i<=n;i++)
    		for(j=1;j<=n;j++){
                ds=dist(e[i].x,e[i].y,e[j].x,e[j].y)*60.0/10000.0;
    			if(!a[i][j])
    			    a[i][j]=ds;
                else
                    a[i][j]=ds<a[i][j]?ds:a[i][j];
            }
    	for(i=1;i<=n;i++)d[i]=inf;
    	d[1]=0;
    	double mins;
    	for(i=1;i<=n;i++){
    		mins=inf;
    		for(j=1;j<=n;j++)
    			if(!p[j] && d[j]<mins){
    				mins=d[j];
    				k=j;
    			}
    		p[k]=1;
    		for(j=1;j<=n;j++)
    			if(!p[j] && a[i][j]!=0 && d[j]>d[k]+a[k][j])
    				d[j]=d[k]+a[k][j];	
    	}
    	int ans=(int)(d[n]+0.5);
    	printf("%d
    ",ans);
    	system("pause");
    	return 0;
    }
    


  • 相关阅读:
    tomcat剖析(一)
    java内存区域
    经典排序算法-冒泡与选择
    使用docker安装mysql服务
    C语言博客作业--结构体
    C博客作业--指针
    C语言博客作业--字符数组
    C语言博客作业--数组
    C语言博客作业--数据类型
    C语言博客作业--函数
  • 原文地址:https://www.cnblogs.com/cnyali/p/4163895.html
Copyright © 2020-2023  润新知