蜂巢在坐标(0,0)的位置,有五处花丛,蜜蜂从蜂巢出发,要把五处花丛的花蜜采完再回到蜂巢,最短距离是多少。输入说明:一行输入,10个数分别是五处花丛的坐标(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5),用空格隔开。输出说明:输出最短距离,距离向下取整。时间:C/C++5秒其他10秒
平原上,一群蜜蜂离开蜂巢采蜜,要连续采集5片花丛后归巢,已知5片花丛相对蜂巢的坐标,请你帮它们规划一下到访花儿的顺序,以使飞行总距离最短。
代码,算法时间复杂度很高,遍历所有可能性
package com;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
public class JF {
static ArrayList<String[]> list = new ArrayList();
static HashMap<String, int[]> hashMap;
static int min = Integer.MAX_VALUE;
public static void main(String[] args) {
//200, 0 ,200, 10 ,200 ,50 ,200, 30, 200, 25
String[] numbers = {"A", "B", "C", "D", "E"};
hashMap = new HashMap<>();
hashMap.put("A", new int[]{200, 0});
hashMap.put("B", new int[]{200, 10});
hashMap.put("C", new int[]{200, 50});
hashMap.put("D", new int[]{200, 30});
hashMap.put("E", new int[]{200, 25});
getOne(new boolean[numbers.length], numbers, "");
for (String[] strings : list) {
System.out.println(Arrays.toString(strings) + "=" + (int) getInstance(strings));
if ((int) getInstance(strings)<min){
min=(int) getInstance(strings);
}
}
System.out.println(min);
}
public static void getOne(boolean[] flags, String[] numbers, String numStr) {
boolean print = true;
for (int i = 0; i < numbers.length; i++) {
print = print && flags[i];
}
if (print) {
String s = numStr.substring(0, numStr.length() - 1);
String[] split = s.split(",");
//System.out.println(Arrays.toString(split));
list.add(split);
return;
}
for (int i = 0; i < numbers.length; i++) {
if (!flags[i]) {
flags[i] = true;
getOne(flags, numbers, numStr + numbers[i] + ",");
flags[i] = false;
}
}
}
public static double getInstance(String[] strings) {
double sum = 0;
int x = 0;
int y = 0;
for (int i = 0; i < strings.length; i++) {
int[] ints = hashMap.get(strings[i]);
sum += getInstance(x, y, ints[0], ints[1]);
x = ints[0];
y = ints[1];
}
sum += getInstance(x, y, 0, 0);
return sum;
}
public static double getInstance(int x1, int y1, int x2, int y2) {
double result = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
return result;
}
}
输出
[A, B, C, D, E]=476
[A, B, C, E, D]=482
[A, B, D, C, E]=476
[A, B, D, E, C]=466
[A, B, E, C, D]=472
[A, B, E, D, C]=456
[A, C, B, D, E]=516
[A, C, B, E, D]=512
[A, C, D, B, E]=506
[A, C, D, E, B]=490
[A, C, E, B, D]=512
[A, C, E, D, B]=500
[A, D, B, C, E]=516
[A, D, B, E, C]=496
[A, D, C, B, E]=506
[A, D, C, E, B]=490
[A, D, E, B, C]=496
[A, D, E, C, B]=500
[A, E, B, C, D]=502
[A, E, B, D, C]=486
[A, E, C, B, D]=512
[A, E, C, D, B]=490
[A, E, D, B, C]=496
[A, E, D, C, B]=490
[B, A, C, D, E]=486
[B, A, C, E, D]=492
[B, A, D, C, E]=486
[B, A, D, E, C]=476
[B, A, E, C, D]=482
[B, A, E, D, C]=466
[B, C, A, D, E]=526
[B, C, A, E, D]=522
[B, C, D, A, E]=516
[B, C, D, E, A]=490
[B, C, E, A, D]=522
[B, C, E, D, A]=500
[B, D, A, C, E]=526
[B, D, A, E, C]=506
[B, D, C, A, E]=516
[B, D, C, E, A]=490
[B, D, E, A, C]=506
[B, D, E, C, A]=500
[B, E, A, C, D]=512
[B, E, A, D, C]=496
[B, E, C, A, D]=522
[B, E, C, D, A]=490
[B, E, D, A, C]=506
[B, E, D, C, A]=490
[C, A, B, D, E]=492
[C, A, B, E, D]=488
[C, A, D, B, E]=522
[C, A, D, E, B]=506
[C, A, E, B, D]=518
[C, A, E, D, B]=506
[C, B, A, D, E]=492
[C, B, A, E, D]=488
[C, B, D, A, E]=522
[C, B, D, E, A]=496
[C, B, E, A, D]=518
[C, B, E, D, A]=496
[C, D, A, B, E]=482
[C, D, A, E, B]=496
[C, D, B, A, E]=482
[C, D, B, E, A]=486
[C, D, E, A, B]=466
[C, D, E, B, A]=456
[C, E, A, B, D]=488
[C, E, A, D, B]=506
[C, E, B, A, D]=488
[C, E, B, D, A]=496
[C, E, D, A, B]=476
[C, E, D, B, A]=466
[D, A, B, C, E]=508
[D, A, B, E, C]=488
[D, A, C, B, E]=538
[D, A, C, E, B]=522
[D, A, E, B, C]=518
[D, A, E, C, B]=522
[D, B, A, C, E]=508
[D, B, A, E, C]=488
[D, B, C, A, E]=538
[D, B, C, E, A]=512
[D, B, E, A, C]=518
[D, B, E, C, A]=512
[D, C, A, B, E]=498
[D, C, A, E, B]=512
[D, C, B, A, E]=498
[D, C, B, E, A]=502
[D, C, E, A, B]=482
[D, C, E, B, A]=472
[D, E, A, B, C]=488
[D, E, A, C, B]=522
[D, E, B, A, C]=488
[D, E, B, C, A]=512
[D, E, C, A, B]=492
[D, E, C, B, A]=482
[E, A, B, C, D]=498
[E, A, B, D, C]=482
[E, A, C, B, D]=538
[E, A, C, D, B]=516
[E, A, D, B, C]=522
[E, A, D, C, B]=516
[E, B, A, C, D]=498
[E, B, A, D, C]=482
[E, B, C, A, D]=538
[E, B, C, D, A]=506
[E, B, D, A, C]=522
[E, B, D, C, A]=506
[E, C, A, B, D]=508
[E, C, A, D, B]=526
[E, C, B, A, D]=508
[E, C, B, D, A]=516
[E, C, D, A, B]=486
[E, C, D, B, A]=476
[E, D, A, B, C]=492
[E, D, A, C, B]=526
[E, D, B, A, C]=492
[E, D, B, C, A]=516
[E, D, C, A, B]=486
[E, D, C, B, A]=476
456
另一个版本:
https://blog.csdn.net/rocling/article/details/103196938?utm_source=app