문제링크 : https://www.acmicpc.net/problem/1260
문제풀이
DFS는 보통 재귀 또는 스택을 이용해 풀고, BFS는 큐를 이용하여 구현한다.
이차원 배열로 두 정점이 연결되어 있는지 간선 정보를 저장해놓는다.
DFS : https://manzoo.tistory.com/69
[Algorithm] Depth-first-search (깊이 우선 탐색)
깊이 우선 탐색(depth-first search: DFS)은 맹목적 탐색방법의 하나로 탐색트리의 최근에 첨가된 노드를 선택하고, 이 노드에 적용 가능한 동작자 중 하나를 적용하여 트리에 다음 수준(level)의 한 개의 자식노..
manzoo.tistory.com
BFS : https://manzoo.tistory.com/12?category=767113
[Algorithm] Breadth-first search (너비 우선 탐색)
너비 우선 탐색(Breadth-first search, BFS)은 맹목적 탐색방법의 하나로 시작 정점을 방문한 후 시작 정점에 인접한 모든 정점들을 우선 방문하는 방법이다. 더 이상 방문하지 않은 정점이 없을 때까지 방문하지..
manzoo.tistory.com
소스코드
import java.io.*; import java.util.Arrays; import java.util.StringTokenizer; import java.util.LinkedList; import java.util.Queue; public class p_1260 { static int map[][]; static boolean visit[]; static int N; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); StringTokenizer st = new StringTokenizer(s); N = Integer.parseInt(st.nextToken()); int M = Integer.parseInt(st.nextToken()); int V = Integer.parseInt(st.nextToken()); map = new int[N+1][N+1]; visit = new boolean[N+1]; for (int i = 0; i <= N; i++) { Arrays.fill(map[i], 0); } Arrays.fill(visit, false); for (int i = 0; i < M; i++) { String edge = br.readLine(); st = new StringTokenizer(edge); int v1 = Integer.parseInt(st.nextToken()); int v2 = Integer.parseInt(st.nextToken()); map[v1][v2] = map[v2][v1] = 1; } dfs(V); System.out.println(); Arrays.fill(visit, false); bfs(V); } public static void bfs(int v) { Queue queue = new LinkedList(); queue.offer(v); visit[v] = true; System.out.printf(v + " "); while (!queue.isEmpty()) { int poll = queue.poll(); for (int i = 1; i <= N; i++) { if (map[poll][i] == 1 && !visit[i]) { queue.offer(i); visit[i] = true; System.out.printf(i + " "); } } } for (int i = 1; i <= N; i++) { if (map[v][i] == 1 && !visit[i]) { bfs(i); } } } public static void dfs(int v) { visit[v] = true; System.out.printf(v + " "); for (int i = 1; i <= N; i++) { if (map[v][i] == 1 && !visit[i]) { dfs(i); } } } }
'Algorithm > 문제풀이' 카테고리의 다른 글
[백준] 1697번: 숨바꼭질 (0) | 2019.06.20 |
---|---|
[백준] 2178번: 미로탐색 (0) | 2019.06.20 |
[백준] 1912번: 연속합 (0) | 2019.06.13 |
[백준] 1978번: 소수 찾기 (0) | 2019.06.13 |
[백준] 1003번: 피보나치 함수 (0) | 2019.06.12 |