Untitled
unknown
plain_text
a year ago
3.2 kB
5
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