我正在尝试为 hackerrank DSA 问题出租车司机的问题编写代码 汉堡镇是一个由特殊路口和通道组成的城市。每对路口之间恰好有一条最短路径。交界处位于并且两个交界处之间的距离由 Taxicab 几何形状定义。
蒂姆最近提供了一辆出租车作为出租车司机。他的车很便宜,但是有一个很大的缺陷。在加油之前,它只能水平驱动单元和垂直驱动单元。
如果客户想从一个路口被带到另一个路口,那么这辆车只能在这条路线上行驶,当且仅当这条路径上的水平距离之和和垂直距离之和分别小于或等于 和 。
此外,任意两个路口之间都有唯一的路径。 现在他想把车还给卖家。但他首先想知道,这是否值得。这就是为什么他想知道无序对的数量,这样就不可能将客户从一个路口带到另一个路口。
现在他想把车还给卖家。但他首先想知道,这是否值得。这就是为什么他想知道无序对的数量,这样就不可能将客户从一个路口带到另一个路口。
import java.util.\*;
class Result {
public static int solve(long h, long v, List<List<Integer>> junctions, List<List<Integer>> edges) {
// create adjacency list representation of the graph
Map<Integer, List<Integer>> adjList = new HashMap<>();
for (List<Integer> edge : edges) {
int u = edge.get(0);
int w = edge.get(1);
adjList.computeIfAbsent(u, k -> new ArrayList<>()).add(w);
adjList.computeIfAbsent(w, k -> new ArrayList<>()).add(u);
}
// initialize count of unreachable pairs
int count = 0;
// iterate over all pairs of junctions
for (int i = 0; i < junctions.size(); i++) {
for (int j = i + 1; j < junctions.size(); j++) {
int u = junctions.get(i).get(0);
int w = junctions.get(j).get(0);
// check if both junctions are reachable from each other
boolean[] visitedU = new boolean[junctions.size() + 1];
dfs(u, visitedU, adjList, Arrays.asList(w));
boolean[] visitedW = new boolean[junctions.size() + 1];
dfs(w, visitedW, adjList, Arrays.asList(u));
if (!visitedU[w] || !visitedW[u]) {
count++;
}
}
}
// return number of unreachable pairs
return count;
}
// helper method to perform depth-first search
private static void dfs(int u, boolean[] visited, Map<Integer, List<Integer>> adjList, List<Integer> targets) {
visited[u] = true;
if (targets.contains(u)) {
for (int v : targets) {
visited[v] = true;
}
return;
}
for (int v : adjList.getOrDefault(u, new ArrayList<>())) {
if (!visited[v]) {
dfs(v, visited, adjList, targets);
}
}
}
}
public class Solution {
public static void main(String\[\] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
long h = scanner.nextLong();
long vCount = scanner.nextLong();
List<List<Integer>> junctions = new ArrayList<>();
for (int i = 0; i < n; i++) {
int x = scanner.nextInt();
junctions.add(Arrays.asList(x, 0));
}
List<List<Integer>> edges = new ArrayList<>();
for (int i = 0; i < n - 1; i++) {
int u = scanner.nextInt();
int w = scanner.nextInt();
edges.add(Arrays.asList(u, w));
}
int result = Result.solve(h, vCount, junctions, edges);
System.out.println(result);
scanner.close();
}
}
但是我没有得到以下输入的预期输出
3 2 1
0 0
1 1
2 0
1 2
2 3
预期产出 1个 输出 0
你能给我一个解决问题的方法吗?