"이 네트워크에 따로 노는 친구 그룹이 몇 개지? 이 지도에 섬이 몇 개지? 둘은 사실 같은 질문이야. 끊어진 조각이 몇 개냐는 거지. 그리고 안 가본 노드마다 BFS나 DFS를 한 번씩 돌리면 답이 나와."
연결 요소
연결 요소(connected component)는 무방향 그래프에서 서로 닿을 수 있는 노드들의 최대 묶음이야. 모든 노드를 돌면서 아직 안 가본 노드에서 BFS나 DFS를 시작하면, 한 번의 순회가 요소 하나를 덮고 시작한 횟수가 곧 요소 개수가 돼. 전체가 O(V+E)고. 방향 그래프에서는 "연결"이라는 말이 하나가 아니라는 걸 조심해. 방향을 무시하고 보는 약한 연결 요소와, 양쪽으로 다 갈 수 있는 강한 연결 요소를 구분해야 하거든.
플러드 필: 격자에서 같은 아이디어
2차원 격자는 사실 그래프야. 각 셀이 노드고 위아래 양옆의 인접 셀이 그 이웃이지. 그래서 페인트통 도구도, "섬 세기"도, 이미지의 영역 검출도 전부 플러드 필이야. 셀 하나에서 시작해 같은 색으로 이어진 셀 전체를 BFS나 DFS로 훑으면서 칠해 나가는 거지. "섬 개수"는 말 그대로 "땅 셀의 연결 요소 세기"야. 격자 좌표가 노드가 되고 인접이 암묵적인 간선이 될 뿐, 돌고 채우는 패턴은 똑같아. 격자를 그래프로 알아보는 것, 이게 이 트랙 전체에서 가장 효과가 큰 관점 전환이야.
사촌: 이분 그래프 확인 (2-색칠)
같은 순회 골격이 또 다른 고전 문제에도 답해. 이 그래프가 이분 그래프(bipartite)인가, 그러니까 모든 간선이 두 그룹 사이를 건너가도록, 한 그룹 안에는 간선이 없도록 노드를 둘로 나눌 수 있는가 하는 문제야. BFS나 DFS를 돌리면서 두 가지 색으로 칠해 보면 돼. 간선을 건널 때마다 색을 바꾸는 거지. 그러다 이미 인접한 두 노드에 같은 색을 줘야 하는 상황이 오면 이분 그래프가 아니야. '내부 충돌 없이 두 팀으로 나눌 수 있나?'를 모델링하는 거라 스케줄링, 매칭, 충돌 검출에 쓰여. BFS와 DFS가 하나의 알고리즘이 아니라 서로 다른 장부를 걸어 쓰는 골격이라는 걸 다시 확인시켜 주는 예이기도 하고.