문제링크 : 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 |