목표가 거리인지 구조인지 나눈다
최단 간선 수가 필요하면 BFS, 연결성이나 사이클 구조를 훑을 때는 DFS가 자연스럽다.
BFS는 가까운 상태부터, DFS는 한 경로를 깊게 따라간다. visited를 언제 표시하느냐가 중복과 거리 정확도를 결정한다.
최단 간선 수가 필요하면 BFS, 연결성이나 사이클 구조를 훑을 때는 DFS가 자연스럽다.
BFS는 queue에 넣는 순간 표시해야 같은 정점이 여러 거리로 들어오지 않는다.
간선 수가 적으면 adjacency list, 밀집 그래프나 빠른 존재 확인은 matrix를 고려한다.
dist.assign(n, -1);
dist[start] = 0; q.push(start);
while (!q.empty()) {
int v = q.front(); q.pop();
for (int to : g[v]) if (dist[to] == -1) {
dist[to] = dist[v] + 1; q.push(to);
}
}