int[] distances(List<List<Integer>> graph, int start) {
int[] dist = new int[graph.size()];
Arrays.fill(dist, -1);
ArrayDeque<Integer> queue = new ArrayDeque<>();
dist[start] = 0;
queue.add(start);
while (!queue.isEmpty()) {
int node = queue.remove();
for (int next : graph.get(node)) if (dist[next] == -1) {
dist[next] = dist[node] + 1;
queue.add(next);
}
}
return dist;
}
def distances(graph: list[list[int]], start: int) -> list[int]:
dist = [-1] * len(graph)
dist[start] = 0
queue = deque([start])
while queue:
node = queue.popleft()
for nxt in graph[node]:
if dist[nxt] == -1:
dist[nxt] = dist[node] + 1
queue.append(nxt)
return dist
def distances(graph: Vector[Vector[Int]], start: Int): Array[Int] =
val dist = Array.fill(graph.length)(-1)
val queue = scala.collection.mutable.Queue(start)
dist(start) = 0
while queue.nonEmpty do
val node = queue.dequeue()
for next <- graph(node) do
if dist(next) == -1 then
dist(next) = dist(node) + 1
queue.enqueue(next)
dist
std::vector<int> distances(const std::vector<std::vector<int>>& graph, int start) {
std::vector<int> dist(graph.size(), -1);
std::queue<int> queue;
dist[start] = 0;
queue.push(start);
while (!queue.empty()) {
int node = queue.front();
queue.pop();
for (int next : graph[node]) if (dist[next] == -1) {
dist[next] = dist[node] + 1;
queue.push(next);
}
}
return dist;
}