Untitled
unknown
plain_text
2 years ago
2.2 kB
9
Indexable
package Bai1;
import java.util.Scanner;
public class ShipperHugo {
static int sx, sy, hx ,hy;
static int[][] adj = new int[15][15];
static int n; // n la so dia diem tong cong
static Tile[] pos = new Tile[15];
static int[] visit = new int[15];
static int min, sum, count ;
static int abs(int x){
return x < 0 ? -x:x;
}
static int dis(Tile x, Tile y){
return abs(y.x - x.x) + abs(y.y - x.y);
}
static void backtrack(int i){
if(sum > min) return;
if (count == n){
min = sum < min ? sum : min;
return;
}
for (int j = 0; j < n; j++){
if (count < n - 1){
if (j == n - 1) continue;
if (visit[j] == 0){
//System.out.println("Visit " + j + " with distance " + adj[i][j]);
visit[j] = 1;
sum += adj[i][j];
count++;
backtrack(j);
visit[j]= 0;
sum -= adj[i][j];
count--;
}
}
else if (count == n - 1){
if (visit[j] == 0){
visit[j] = 1;
sum += adj[i][j];
count++;
backtrack(j);
visit[j]= 0;
sum -= adj[i][j];
count--;
}
}
}
return;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int tc = 1; tc <= T; tc++){
sum = 0;
count = 1;
min = 999999;
sx = sc.nextInt();
sy = sc.nextInt();
hx = sc.nextInt();
hy = sc.nextInt();
n = sc.nextInt();
pos[0] = new Tile(sx, sy);
int id = 1;
for (int i = 0; i < n; i++){
int x = sc.nextInt();
int y = sc.nextInt();
pos[id] = new Tile(x, y);
id++;
}
pos[id] = new Tile(hx, hy);
id = id + 1;
n = id;
for (int i = 0; i < id - 1; i++){
for (int j = i + 1; j < id; j++){
int distance = dis(pos[i], pos[j]);
adj[i][j] = distance;
adj[j][i] = distance;
}
}
// for (int i = 0; i < id; i++){
// for (int j = 0; j < id; j++){
// System.out.print(adj[i][j] + " ");
// }
// System.out.println();
// }
//System.out.println();
visit[0] = 1;
backtrack(0);
System.out.println("Case #" + tc + " " + min);
}
}
}
Editor is loading...
Leave a Comment