본문 바로가기
Study/Algorithm

[1260] DFS와 BFS

by ksb0511 2020. 5. 22.

그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.

 

입력 : 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다.

출력 : 첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다.

 


<풀이>

인접행렬로 구현하는 방법과 인접리스트로 구현하는 방법이 있다.

위와 같이 dfs와 bfs의 차이는 탐색 순서 자체가 다르다.

 

먼저 dfs 코드는 

public static void dfs(int node, boolean[] visited) {
        if(visited[node]) return;
        
        visited[node] = true;
 
        for(int next:nodeList[node]) {
            dfs(next, visited, sb);
        }
}

 위와 같고, bfs 코드는

 

 public static void bfs(int node, boolean[] visited) {
        Queue<Integer> queue = new LinkedList<Integer>();
        
        queue.offer(node);
        
        while(!queue.isEmpty()) {
            node = queue.poll();
            
            if(visited[node]) continue;
            
            visited[node] = true;
            
            for(int nextNode:nodeList[node]) {
                queue.add(nextNode);
            }
        }
}

 위와 같은 형식이다.

 

이 것을 조합해서 풀면 되는 문제인데.. 코드 구현실패했다....

'Study > Algorithm' 카테고리의 다른 글

[프로그래머스/LEVEL1] 가장 가까운 같은 글자 (java)  (0) 2023.02.12
[11724] 연결 요소의 개수  (0) 2020.05.22
[1026] 보물  (0) 2020.05.22
[1890] 점프  (0) 2020.05.22
[2609] 최대공약수와 최소공배수  (0) 2020.05.16

댓글