BFS with visited
Time O(V + E) Space O(V + E)Queue the source and mark it. Pop nodes; if a node is the destination, return true; otherwise queue its unvisited neighbours.
import java.util.*;
class Solution {
public boolean validPath(int n, int[][] edges, int source, int destination) {
List<List<Integer>> adj = new ArrayList<>();
for (int i = 0; i < n; i++) adj.add(new ArrayList<>());
for (int[] e : edges) { adj.get(e[0]).add(e[1]); adj.get(e[1]).add(e[0]); }
boolean[] seen = new boolean[n];
Deque<Integer> q = new ArrayDeque<>();
q.offer(source);
seen[source] = true;
while (!q.isEmpty()) {
int u = q.poll();
if (u == destination) return true;
for (int v : adj.get(u)) if (!seen[v]) { seen[v] = true; q.offer(v); }
}
return false;
}
}Verdict: The template for every reachability question.