--- title: 1334. Find the City With the Smallest Number of Neighbors at a Threshold Distance tags: graph description: share source code. --- # 1334. Find the City With the Smallest Number of Neighbors at a Threshold Distance ```java= class Solution { // 每ㄧ個城市能到達的不同城市 Map<Integer, Set<Integer>> CityReachCities = new HashMap<>(); public int findTheCity(int n, int[][] edges, int distanceThreshold) { int [][] dist = new int [n][n]; for(int i = 0; i < n; i++){ CityReachCities.put(i, new HashSet<>()); Arrays.fill(dist[i] , -1); } for(int i = 0; i < edges.length; i++){ dist[edges[i][0]][edges[i][1]] = edges[i][2]; dist[edges[i][1]][edges[i][0]] = edges[i][2]; } Set<Integer> visited = new HashSet<>(); // 加入每ㄧ個能到達的不同城市 for(int i = 0; i < n; i++){ visited.add(i); dfs(n, dist, i, i, -1, 0, distanceThreshold, visited); visited.clear(); } // System.out.println("key: " + CityReachCities.keySet().toString()); // System.out.println("val: " + CityReachCities.values().toString()); // 最大 id 的城市 int max_city = -1; // 最小的鄰居 int min_num = Integer.MAX_VALUE; for(int i = 0; i < n; i++){ if(min_num >= CityReachCities.get(i).size()){ min_num = CityReachCities.get(i).size(); max_city = i; } } return max_city; } public void dfs(int n, int [][] dist, int start, int u, int p, int sum, int distanceThreshold, Set<Integer> visited){ for(int v = 0; v < n; v++){ if(v == p || dist[u][v] == -1 || sum + dist[u][v] > distanceThreshold || visited.contains(v)){ continue; } CityReachCities.get(start).add(v); visited.add(v); dfs(n, dist, start, v, u, sum + dist[u][v], distanceThreshold, visited); visited.remove(visited.size() -1); } } } ```