Advertisement
rajeshinternshala

Untitled

Aug 8th, 2023
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.17 KB | None | 0 0
  1.     int minimumDistance = Integer.MIN_VALUE;
  2.  
  3.     int rowNbr[]
  4.             = new int[]{-1, 0, 1, 0};
  5.     int colNbr[]
  6.             = new int[]{0, -1, 0, 1};
  7.     HashSet<String> monsterArea;
  8.     HashMap<String, TreeSet<Integer>> map;
  9.  
  10.     int findbestpath(int n, int m, int sr, int sc, int er, int ec, List<Integer> mr, List<Integer> mc) {
  11.         map = new HashMap<>();
  12.         monsterArea = new HashSet<>();
  13.  
  14.  
  15.         for (int i = 0; i < n; i++) {
  16.             for (int j = 0; j < m; j++) {
  17.                 for (int k = 0; k < mr.size(); k++) {
  18.                     int mcr = mr.get(k);
  19.                     int mcc = mc.get(k);
  20.                     monsterArea.add(mcr + "-" + mcc);
  21.                     if (mcr == i && mcc == j) {
  22.                         continue;
  23.                     }
  24.                     String str = i + "-" + j;
  25.                     int distance = Math.abs(i - mcr) + Math.abs(mcc - j);
  26.                     map.putIfAbsent(str, new TreeSet<>());
  27.                     map.get(str).add(distance);
  28.  
  29.                 }
  30.             }
  31.         }
  32.  
  33.  
  34.         dfs(n, m, sr, sc, mr, mc, er, ec, new HashSet<String>(), map.get(sr + "-" + sc).first());
  35.         return minimumDistance == Integer.MIN_VALUE ? 0 : minimumDistance;
  36.     }
  37.  
  38.     private void dfs(int n, int m, int sr, int sc, List<Integer> mr, List<Integer> mc, int er, int ec, HashSet<String> visited, int maxValue) {
  39.  
  40.         visited.add(sr + "-" + sc);
  41.  
  42.         if (sr == er && sc == ec) {
  43.  
  44.             minimumDistance = Math.max(minimumDistance, maxValue);
  45.         }
  46.  
  47.  
  48.         for (int i = 0; i < rowNbr.length; i++) {
  49.             int nextRow = sr + rowNbr[i];
  50.             int nextCol = sc + colNbr[i];
  51.             String str = nextRow + "-" + nextCol;
  52.             if (!visited.contains(str) && isValid(nextRow, nextCol, n, m) && !monsterArea.contains(str)) {
  53.  
  54.                 dfs(n, m, nextRow, nextCol, mr, mc, er, ec, visited, Math.min(maxValue, map.get(str).first()));
  55.  
  56.             }
  57.  
  58.         }
  59.         visited.remove(sr + "-" + sc);
  60.     }
  61.  
  62.     private boolean isValid(int nextRow, int nextCol, int n, int m) {
  63.         return nextRow >= 0 && nextRow < n && nextCol >= 0 && nextCol < m;
  64.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement