Untitled
unknown
plain_text
a year ago
3.2 kB
9
Indexable
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class HugoDiTau {
public static int N, demLeft, demRight, move, res;
public static int[] arr, gate, numOfPerson, visited, visited2;
public static int[][] hoanVi = {
{0, 1, 2}, {0, 2, 1},
{1, 0, 2}, {1, 2, 0},
{2, 0, 1}, {2, 1, 0},
};
public static void demViTriGanNhat(int gate) {
// dem trai
int left = gate;
int right = gate;
demLeft = 0;
demRight = 0;
while(left >= 0) {
if (visited[left] == 0) {
demLeft++;
break;
}
left--;
}
// dem phai
while (right < N) {
if (visited[right] == 0) {
demRight++;
break;
}
right++;
}
if (demLeft == 0) {
demLeft = Integer.MAX_VALUE;
}
if (demRight == 0) {
demRight = Integer.MAX_VALUE;
}
}
public static void backtrack() {
if (visited2[0] == 1 && visited2[1] == 1 && visited2[2] == 1) {
if (res > move) {
res = move;
}
return;
}
for (int j = 0; j < 3; j++) {
int currentGate = gate[j];
if (visited2[j] == 0) {
visited2[j] = 1;
int person = numOfPerson[j];
while (person != 1) {
demViTriGanNhat(currentGate);
if (demLeft <= demRight) {
visited[currentGate-demLeft+1] = j+1;
person--;
move+=demLeft;
}
else {
visited[currentGate+demRight-1] = j+1;
person--;
move+=demRight;
}
}
demViTriGanNhat(currentGate);
if (demLeft < demRight) {
visited[currentGate-demLeft+1] = j+1;
person--;
move+=demLeft;
backtrack();
visited[currentGate-demLeft+1] = 0;
person++;
move-=demLeft;
}
else if (demLeft > demRight) {
visited[currentGate+demRight-1] = j+1;
person--;
move+=demRight;
backtrack();
visited[currentGate+demRight-1] = 0;
person++;
move-=demRight;
}
else {
visited[currentGate-demLeft+1] = j+1;
person--;
move+=demLeft;
backtrack();
visited[currentGate-demLeft+1] = 0;
person++;
move-=demLeft;
visited[currentGate+demRight-1] = j+1;
person--;
move+=demRight;
backtrack();
visited[currentGate+demRight-1] = 0;
person++;
move-=demRight;
}
visited2[j] = 0;
for (int k = 0; k < N; k++) {
if (visited[k] == j + 1) {
visited[k] = 0;
}
}
}
}
}
public static void main(String[] args) throws FileNotFoundException {
System.setIn(new FileInputStream("C:\\Users\\lehuyen130901\\eclipse-workspace\\BackTrack\\src\\input.txt"));
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
for (int t1 = 1; t1 <= t; t1++) {
N = sc.nextInt();
arr = new int[N];
gate = new int[3];
numOfPerson = new int[3];
res = Integer.MAX_VALUE;
for (int i = 0; i < 3; i++) {
gate[i] = sc.nextInt() - 1;
numOfPerson[i] = sc.nextInt();
}
move = 0;
visited = new int[N];
visited2 = new int[N];
backtrack();
System.out.println("Case #" + t1);
System.out.println(res);
}
sc.close();
}
}Editor is loading...
Leave a Comment