티스토리 뷰

코딩테스트/백준

[BJ] 1260. DFS와 BFS

jhk828 2021. 2. 14. 03:23

[BJ] 1260. DFS와 BFS 

www.acmicpc.net/problem/1260

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

import java.io.*;
import java.util.*;

//210212

public class Main_BJ_1260_DFS와BFS {
	static int N, M; //정점 수 N, 간선 수 M
	static int[][] map;
	static int[] visit;
	static Queue<Integer> queue;
	static StringBuilder sb = new StringBuilder();
	
	static void DFS(int v) {
		visit[v] = 1;
		sb.append(v + " "); 
		
		for(int i=1; i<=N; i++) {
			if (map[v][i]==1 && visit[i]==0) {
				visit[i] = 1;
				DFS(i);
			}		
		}
	} // 

	static void BFS(int v) {
		// 루트 노드 방문
		visit[v] = 1;
		sb.append(v + " ");
		queue.offer(v);
		
		while(!queue.isEmpty()) {
			v = queue.poll();
			// 큐에서 앞에서부터 꺼내며 자식 노드들 방문
			for(int i=1; i<=N; i++) {
				if (map[v][i]==1 && visit[i]==0) {
					// 자식 노드 방문
					visit[i] = 1;
					sb.append(i + " ");
					queue.offer(i);
				}
			}
		}
	} // 
	
	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("res/input_BJ_1260_DFS와BFS.txt"));
		Scanner sc = new Scanner(System.in);
		
		N = sc.nextInt(); // 정점 수
		M = sc.nextInt(); // 간선 수
		int start = sc.nextInt(); // 탐색을 시작할 정점 번호
		
		map = new int[N+1][N+1];
		
		for(int i=0;i<M; i++) {
			int v1 = sc.nextInt();
			int v2 = sc.nextInt();
			
			map[v1][v2] = 1;
			map[v2][v1] = 1;
		}
		
		visit = new int[N+1];
		DFS(start);
		
		sb.append("\n");
		queue = new LinkedList<Integer>();
		visit = new int[N+1];
		BFS(start);
		
		System.out.println(sb.toString());
		sc.close();
	} //
}

'코딩테스트 > 백준' 카테고리의 다른 글

[BJ] 7569. 토마토  (0) 2021.02.14
[BJ] 2606. 바이러스  (0) 2021.02.14
[BJ] 11650. 좌표 정렬하기  (0) 2021.02.14
[BJ] 1436. 영화감독 숌  (0) 2021.02.14
[BJ] 1018. 체스판 다시 칠하기  (0) 2021.02.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함