荣耀8.30笔试 采蜜
题目描述
平原上,一群蜜蜂离开蜂巢采蜜,要连续采集5片花丛后归巢,已知5片花丛相对蜂巢的坐标,请你帮它们规划一下到访花儿的顺序,以使飞行总距离最短。
输入描述
以蜂巢为平面坐标原点的5片花丛A、B、C、D、E的坐标,坐标值为整数。
输出描述
从出发到返回蜂巢最短路径的长度取整值,取整办法为舍弃小数点后面的值。
示例
输入
200 0 200 10 200 50 200 30 200 25
输出
456
只通过测例,未实测,仅供参考
import java.util.Scanner; public class ggg { public static void main(String[] args) { Scanner scan = new Scanner(System.in); double[][] num = new double[5][2]; for (int i = 0; i < 5; i++) { num[i][0] = scan.nextInt(); num[i][1] = scan.nextInt(); } int[] num1 = new int[6]; double ans = 0; ans=hhh(num,num1,0,0,5,0,1000000); System.out.println(ans); } static public double hhh(double[][] num,int[] num1,double x,double y,int t,double ttt,double m){ double tt=ttt; num1[t]=1; for (int i = 0; i < 5; i++) { if(num1[i]==0){ ttt=tt+Math.sqrt(Math.pow(num[i][0]-x,2)+Math.pow(num[i][1]-y,2)); m=hhh(num,num1,num[i][0],num[i][1],i,ttt,m); num1[i]=0; } } int s=0; for (int i = 0; i < 5; i++) { if(num1[i]==1){ s++; } } if(s==5){ m=Math.min(tt+Math.sqrt(Math.pow(num[t][0],2)+Math.pow(num[t][1],2)),m); } return m; } }