알고리즘 스터디
- 백준 1068 트리 O
- 백준 12888 완전 이진 트리 도로 네트워크 O
- 백준 2233 사과나무 O
- 백준 1189 컴백홈 O
- 백준 2261 좋은수열 O
- 백준 19236 청소년 상어 ~
- a 노드(시작 노드)를 방문
-> 방문한 노드는 방문했다고 표시- a와 인접한 노드들을 차례로 순회
-> a와 인접한 노드가 없다면 종료- a와 이웃한 노드 b를 방문했다면, a와 인접한 또 다른 노드를 방문하기 전에 b의 이웃 노드들을 전부 방문해야 한다
-> b를 시작 정점으로 DFS를 다시 시작- b의 분기를 전부 완벽하게 탐색했다면 다시 a에 인접한 정점들 중에서 아직 방문이 안 된 정점을 찾는다
-> 아직 방문이 안 된 정점이 없으면 종료
-> 있으면 다시 그 정점을 시작 정점으로 DFS를 시작
- 순환 호출을 이용한 DFS 의사코드(pseudocode)
void search(Node root) { if (root == null) return; // root 노드 방문 visit(root); //방문한 노드를 표시 root.visited = true; // root 노드와 인접한 정점을 모두 방문 for each (Node n in root.adjacent) { //방문하지 않은 정점을 찾는다 if (n.visited == false) { //root 노드와 인접한 정점 정점을 시작 정점으로 DFS를 시작 search(n); } } }