Advertisement
rajeshinternshala

Untitled

Aug 8th, 2023
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.62 KB | None | 0 0
  1. import LeetCode.MonthlyChallenges_21.Sept21.ImageOverlap;
  2.  
  3. import java.util.*;
  4. import java.util.Arrays;
  5.  
  6. public class Main {
  7.  
  8.  
  9.     int minimumDistance = Integer.MIN_VALUE;
  10.  
  11.     int rowNbr[]
  12.             = new int[]{-1, 0, 1, 0};
  13.     int colNbr[]
  14.             = new int[]{0, -1, 0, 1};
  15.     HashSet<String> monsterArea;
  16.     HashMap<String, TreeSet<Integer>> map;
  17.     HashMap<String, Integer> dp;
  18.  
  19.     int findbestpath(int n, int m, int sr, int sc, int er, int ec, List<Integer> mr, List<Integer> mc) {
  20.         map = new HashMap<>();
  21.         monsterArea = new HashSet<>();
  22.         dp = new HashMap<>();
  23.  
  24.         for (int i = 0; i < n; i++) {
  25.             for (int j = 0; j < m; j++) {
  26.                 for (int k = 0; k < mr.size(); k++) {
  27.                     int mcr = mr.get(k);
  28.                     int mcc = mc.get(k);
  29.                     monsterArea.add(mcr + "-" + mcc);
  30.                     if (mcr == i && mcc == j) {
  31.                         continue;
  32.                     }
  33.                     String str = i + "-" + j;
  34.                     int distance = Math.abs(i - mcr) + Math.abs(mcc - j);
  35.                     map.putIfAbsent(str, new TreeSet<>());
  36.                     map.get(str).add(distance);
  37.  
  38.                 }
  39.             }
  40.         }
  41.        
  42.         return dfs(n, m, sr, sc, mr, mc, er, ec, new HashSet<String>());
  43.     }
  44.  
  45.     private int dfs(int n, int m, int sr, int sc, List<Integer> mr, List<Integer> mc, int er, int ec, HashSet<String> visited) {
  46.         String key = sr + "-" + sc;
  47.         visited.add(key);
  48.         if (dp.containsKey(key)) {
  49.             return dp.get(key);
  50.         }
  51.  
  52.         if (sr == er && sc == ec) {
  53.  
  54.             return map.get(key).first();
  55.         }
  56.  
  57.         int ans = Integer.MIN_VALUE;
  58.         for (int i = 0; i < rowNbr.length; i++) {
  59.             int nextRow = sr + rowNbr[i];
  60.             int nextCol = sc + colNbr[i];
  61.             String str = nextRow + "-" + nextCol;
  62.             if (!visited.contains(str) && isValid(nextRow, nextCol, n, m) && !monsterArea.contains(str)) {
  63.                 int value = Math.min(dfs(n, m, nextRow, nextCol, mr, mc, er, ec, visited), map.get(key).first());
  64.                 ans = Math.max(ans, value);
  65.             }
  66.  
  67.  
  68.         }
  69.         visited.remove(key);
  70.         // dp.put(key, ans);
  71.         return ans;
  72.     }
  73.  
  74.     private boolean isValid(int nextRow, int nextCol, int n, int m) {
  75.         return nextRow >= 0 && nextRow < n && nextCol >= 0 && nextCol < m;
  76.     }
  77.  
  78.     public static void main(String[] args) {
  79.         System.out.println(new Main().findbestpath(5, 3, 1, 1, 4, 2, Arrays.asList(0, 2), Arrays.asList(2, 2)));
  80.     }
  81. }
  82.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement