👀 문제
https://www.acmicpc.net/problem/1260
👊 도전
1. 설계
- dfs, bfs를 구현한다.
2. 구현 (성공 코드)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
/**
* @author HEESOO
*
*/
public class Main {
static int[][] graph;
static boolean[] visit;
public static void dfs(int s) {
if(visit[s]) return;
visit[s]=true;
System.out.print(s+" ");
for(int i=1;i<visit.length;i++)
if(!visit[i]&&graph[s][i]==1)
dfs(i);
}
public static void bfs(int s) {
Queue<Integer> q=new LinkedList<Integer>();
q.add(s);
visit[s]=true;
while(!q.isEmpty()) {
int now=q.poll();
System.out.print(now+" ");
for(int i=1;i<visit.length;i++) {
if(graph[now][i]==1&&!visit[i]) {
q.add(i);
visit[i]=true;
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
int n=scan.nextInt();
int m=scan.nextInt();
int v=scan.nextInt();
graph=new int[n+1][n+1];
visit=new boolean[n+1];
for(int i=0;i<m;i++) {
int x=scan.nextInt();
int y=scan.nextInt();
graph[x][y]=1;
graph[y][x]=1;
}
dfs(v);
System.out.println();
Arrays.fill(visit, false);
bfs(v);
}
}
3. 결과
🤟 성공 🤟
4. 설명
- 그래프 탐색을 위해 필요한 변수들을 만든다
- graph는 노드 간의 연결을 저장한다.
- visit는 노드의 방문여부를 저장한다.
- DFS를 구현한다
- DFS는 깊이 우선 탐색으로 현재 노드에 연결된 노드들의 탐색을 끝낸 후 다음 노드로 이동한다.
- 재귀로 현재 노드에서 연결된 노드들 중에 방문하지 않은 곳을 탐색한다.
- BFS를 구현한다
- BFS는 너비 우선 탐색으로 현재 레벨에 있는 노드들을 모두 탐색한 후 다음 레벨로 넘어간다.
- 큐를 사용하여 현재 노드에 연결된 노드들 중 방문하지 않은 노드들을 저장하고, 넣은 순서대로 탐색한다.