하루 하루

BFS /DFS 본문

IT/PLUS

BFS /DFS

san_deul 2020. 3. 22. 14:00

BFS/ DFS

BFS는 옆으로 (너비로) 탐색을 진행하는 알고리즘이고,  DFS는 아래로(깊이로) 탐색을 진행하는 알고리즘이다. 

 

BFS는 루트에서 시작해서 자식 노드들을 모두 방문후 자식 노드들의 자식 노드를 방문하는 방식으로 진행되고,

DFS는 루트에서 시작해서 자식 노드의 자식 노드로 방문해 마지막까지 갔다가 올라와 형제 노드를 방문하는 방식으로 진행된다. 

 

 

BFS 코드 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
BFS ( Grape , start ){
    for each node in Grape{
        visited[node] = 'no' ; 
    } // 정점을 모두 방문하지 않은 것으로 초기화한다.
    
    visited [start] = 'yes' ; // 시작 정점을 방문한 것으로 표시
    
    enqueue ( Queue, start ) ; // 큐에 시작 정점을 넣는다.     
    
    while ( Queue 가 비어 있는가 ){
        u = dequeue ( Queue ) ; // 큐에서 제일 앞의 정점을 가져온다. 
        for each node in Adjacency(u) { 
        // 위에서 가져온 정점의 인정 정점 집합의 노드들을 하나씩 본다. 
            if (visited[node] == 'no' ){ 
            // 만약 방문하지 않은 노드라면 방문했다는 표시를 하고 큐에 넣는다.  
                visited[node] = 'yes';
                enqueue ( Queue , node ): 
            }
        }
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

DFS 코드 

1
2
3
4
5
6
7
8
9
10
DFS ( node ){
    visited [ node  ] = 'yes' ; //해당 정점을 방문한 것으로 표시
    for each 정점 u in Adjacency(node) {
    // node의 인접 정점 u 각각을 본다     
        if ( visited [u] == 'no' ){
        // 만약 인접 정정 u를 아직 방문하지 않았다면 재귀 함수 호출 
            DFS (u);
        }
    }
}
cs

 

'IT > PLUS' 카테고리의 다른 글

파이썬 주요 정리  (0) 2020.04.24
BFS/ DFS - 백준 2178 미로탐색 C++  (0) 2020.03.26
BFS/ DFS - 백준 11724 연결 요소의 개수 C++  (0) 2020.03.26
BFS/ DFS - 백준 13023 ABCDE C++  (0) 2020.03.22
BFS/ DFS - 백준 1260 C++  (0) 2020.03.22
Comments