zoukankan      html  css  js  c++  java
  • Java实现 蓝桥杯VIP 算法训练 Car的旅行路线

    大家可以看一下这个,蓝桥杯官网的这道题是有问题的

    Car的旅行路线

    算法训练 Car的旅行路线
    时间限制:1.0s 内存限制:256.0MB
    提交此题 锦囊1 锦囊2 查看参考代码
    问题描述
      又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一 条笔直的高速铁路,第I个城市中高速铁路了的单位里程价格为Ti,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为t。
      那么Car应如何安排到城市B的路线才能尽可能的节省花费呢?她发现这并不是一个简单的问题,于是她来向你请教。
      找出一条从城市A到B的旅游路线,出发和到达城市中的机场可以任意选取,要求总的花费最少。
    输入格式
      的第一行有四个正整数s,t,A,B。
      S表示城市的个数,t表示飞机单位里程的价格,A,B分别为城市A,B的序号,(1<=A,B<=S)。
      接下来有S行,其中第I行均有7个正整数xi1,yi1,xi2,yi2,xi3,yi3,Ti,这当中的(xi1,yi1),(xi2,yi2),(xi3,yi3)分别是第I个城市中任意三个机场的坐标,T I为第I个城市高速铁路单位里程的价格。
    输出格式
      共有n行,每行一个数据对应测试数据,保留一位小数。
    样例输入
    1
    1 10 1 3
    1 1 1 3 3 1 30
    2 5 7 4 5 2 1
    8 6 8 8 11 6 3
    样例输出
    47.55
    数据规模和约定
      0<S<=100,

    import java.util.Scanner;
    
    public class Car的旅行路线 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner in = new Scanner(System.in);
    		int s = in.nextInt();//s表示城市的个数
    		int t = in.nextInt();//t代表飞机的单价
    		int A = in.nextInt();
    		int B = in.nextInt();
    		City []cities = new City[s];
    		for(int i = 0; i < s; i++){
    			int x1 = in.nextInt();
    			int y1 = in.nextInt();
    			int x2 = in.nextInt();
    			int y2 = in.nextInt();
    			int x3 = in.nextInt();
    			int y3 = in.nextInt();
    			int price = in.nextInt();
    			City city = new City(x1, y1, x2, y2, x3, y3, price);
    			cities[i] = city;
    		}
    		
    		
    		double  [][]dp = new double[s*4][s*4];
    		
    		for(int i = 0; i < s*4; i++){
    			for( int j = 0; j < s*4 ;j++){
    				if(i/4==j/4){
    					dp[i][j] = dist(cities[i/4].x[i%4],cities[i/4].y[i%4],cities[j/4].x[j%4],cities[j/4].y[j%4])*cities[i/4].price;
    				}else{
    					dp[i][j] = dist(cities[i/4].x[i%4],cities[i/4].y[i%4],cities[j/4].x[j%4],cities[j/4].y[j%4])*t;
    				}
    				
    				//System.out.println(i+" "+j+" "+dp[i][j]);
    			}
    		}
    		
    		
    		for(int i = 0; i < 4*s;i++){
    			for(int j = 0; j < 4*s; j++){
    				for(int k = 0; k < 4*s; k++){
    					dp[j][k] = Math.min(dp[j][k], dp[j][i]+dp[i][k]);
    					//System.out.println(j+" "+k+" "+dp[j][k]);
    				}
    			}
    		}
    		
    		
    		
    		double min = dp[(A-1)*4][(B-1)*4];
    		//System.out.println(min);
    		for(int i = (A-1)*4; i <A*4; i++){
    			for(int j = (B-1)*4; j <B*4; j++){
    				if(min>dp[i][j]){
    					min = dp[i][j];
    					//System.out.println(i+" "+j+" "+min);
    				}
    			}
    		}
    		
    		System.out.printf("%.1f", min);
    	}
    	private static double dist(int x12, int y12, int x22, int y22) {
    		// TODO Auto-generated method stub
    		return Math.sqrt((x22-x12)*(x22-x12)+(y22-y12)*(y22-y12));
    	}
    
    }
    
    
    class City{
    	
    	int []x = new int[4];
    	int []y = new int[4];
    	int price;
    	public City(int x1, int y1, int x2, int y2, int x3, int y3,  int price) {
    		super();
    		x[0] = x1;
    		y[0] = y1;
    		x[1] = x2;
    		y[1] = y2;
    		x[2] = x3;
    		y[2] = y3;
    		
    		double t12 = dist(x1,y1,x2,y2);
    		double t13 = dist(x1,y1,x3,y3);
    		double t23 = dist(x2,y2,x3,y3);
    		
    		if(Math.abs(t12*t12+t13*t13-t23*t23)<0.000001){
    			x[3] = x2+x3-x1;
    			y[3] = y2+y3-y1;
    		}
    		
    		if(Math.abs(t12*t12+t23*t23-t13*t13)<0.000001){
    			x[3] = x1+x3-x2;
    			y[3] = y1+y3-y2;
    		}
    		
    		if(Math.abs(t13*t13+t23*t23-t12*t12)<0.000001){
    			x[3] = x1+x2-x3;
    			y[3] = y1+y2-y3;
    		}
    		
    		this.price = price;
    	}
    	private double dist(int x12, int y12, int x22, int y22) {
    		// TODO Auto-generated method stub
    		return Math.sqrt((x22-x12)*(x22-x12)+(y22-y12)*(y22-y12));
    	}
    	
    }
    
    
  • 相关阅读:
    PAT Advanced 1067 Sort with Swap(0, i) (25分)
    PAT Advanced 1048 Find Coins (25分)
    PAT Advanced 1060 Are They Equal (25分)
    PAT Advanced 1088 Rational Arithmetic (20分)
    PAT Advanced 1032 Sharing (25分)
    Linux的at命令
    Sublime Text3使用指南
    IntelliJ IDEA创建第一个Groovy工程
    Sublime Text3 安装ftp插件
    Sublime Text3配置Groovy运行环境
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12948479.html
Copyright © 2011-2022 走看看