解决方法:使用排列方法,将所有排列搞出来,计算最短路径
import java.util.Scanner;
class Point {
int px;
int py;
public Point(int px, int py) {
this.px = px;
this.py = py;
}
public int getLength(Point p) {
return Math.abs(px - p.px) + Math.abs(py - p.py);
}
}
class Main {
static final Point START = new Point(0, 0);
static int minPath = Integer.MAX_VALUE;
public static int calculateMinPath(Point start, Point[] points) {
return 0;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int pnum = Integer.parseInt(input.nextLine().trim());
Point[] points = new Point[pnum];
for (int i = 0; i < pnum; i++) {
String[] locations = input.nextLine().trim().split(",");
points[i] = new Point(Integer.parseInt(locations[0]),
Integer.parseInt(locations[1]));
}
minPath = a(points,0);
System.out.println(minPath);
}
public static int a(Point[] points , int n) {
if(n == points.length) {
int sum = points[0].getLength(START);
for (int i = 1 ; i<points.length; i++) {
sum = sum + points[i-1].getLength(points[i]);
}
sum = sum + points[points.length -1].getLength(START);
minPath = Math.min(minPath , sum);
return minPath;
}
for (int i = n; i < points.length; i++) {
swap(points,n,i);
a(points,n+1);
swap(points,n,i);
}
return minPath;
}
public static void swap(Point[] points, int i, int j) {
if (i == j) return;
Point temp = points[i];
points[i] = points[j];
points[j] = temp;
}
}