Untitled
unknown
plain_text
2 years ago
2.4 kB
5
Indexable
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Scanner; class Point { int x; int y; Point(int _x, int _y) { this.x = _x; this.y = _y; } // public static int compare() { // // } } public class HugoGiaoHang { static int N, Sx, Sy, Hx, Hy; static Point[] point; static int cbiDuLieu[][], ans, visitToaDo[]; public static void main(String[] args) { try { System.setIn(new FileInputStream("hugoGiaoHang")); } catch (FileNotFoundException e) { e.printStackTrace(); } Scanner sc = new Scanner(System.in); int numTest = sc.nextInt(); for (int tc = 1; tc <= numTest; tc++) { Sx = sc.nextInt(); Sy = sc.nextInt(); Hx = sc.nextInt(); Hy = sc.nextInt(); N = sc.nextInt(); point = new Point[N + 2]; point[0] = new Point(Sx, Sy); point[N + 1] = new Point(Hx, Hy); for (int i = 1; i <= N; i++) { point[i] = new Point(sc.nextInt(), sc.nextInt()); } cbiDuLieu = new int[N + 2][N + 2]; DuLieu(); // for (int i = 0; i <= N + 1; i++) { // for (int j = 0; j <= N + 1; j++) { // System.out.print(cbiDuLieu[i][j] + " "); // } // System.out.println(); // } visitToaDo = new int[N + 2]; ans = Integer.MAX_VALUE; backTrack(0, 0, 0); System.out.println("Case #" + tc + " " + ans); } } public static void DuLieu() { for (int i = 0; i < N + 1; i++) { for (int j = i + 1; j <= N + 1; j++) { int u = Math.abs(point[i].x - point[j].x); int v = Math.abs(point[i].y - point[j].y); cbiDuLieu[i][j] = u + v; cbiDuLieu[j][i] = u + v; } } } public static void backTrack(int numViTriGiaoHang, int Start, int quangDuong) { if (numViTriGiaoHang == N) { // for (int i = 0; i <= N + 1; i++) { // System.out.print(visitToaDo[i] + " "); // } // System.out.println(); // System.out.println(); ans = Math.min(ans, quangDuong + cbiDuLieu[Start][N + 1]);//BT N vtri giao hang + quang duong ve nha return; } // if (quangDuong + cbiDuLieu[numViTriGiaoHang][N + 1] > ans) { // ans = Math.min(ans, quangDuong + cbiDuLieu[numViTriGiaoHang][N + 1]); // return; // } for (int i = 1; i <= N; i++) { if (visitToaDo[i] == 0) { visitToaDo[i] = 1; backTrack(numViTriGiaoHang + 1, i, quangDuong + cbiDuLieu[Start][i]); visitToaDo[i] = 0; } } } }
Editor is loading...