자료구조&알고리즘/백준
1260번: DFS와 BFS [JAVA]
yong_ღ'ᴗ'ღ
2023. 7. 21. 01:23
https://www.acmicpc.net/problem/1260
1260번: DFS와 BFS
첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사
www.acmicpc.net
접근 방식)
"방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문"한다는 걸 기억해두고,
DFS, BFS방식으로 구현하면 된다.
package tony_git.graph_traversal;
import java.util.*;
public class B_1260 {
static ArrayList<Integer>[] A;
static boolean[] visited;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
int V = sc.nextInt();
A = new ArrayList[N + 1];
for (int i = 1; i <= N; i++)
A[i] = new ArrayList<>();
for (int i = 0; i < M; i++) {
int s = sc.nextInt();
int e = sc.nextInt();
A[s].add(e);
A[e].add(s);
}
// 방문할 수 있는 정점이 여러 개인 경우에는 번호 작은 것부터 방문
for (int i = 1; i <= N; i++)
Collections.sort(A[i]);
visited = new boolean[N + 1];
DFS(V);
System.out.println();
visited = new boolean[N + 1];
BFS(V);
}
static void DFS(int node) {
System.out.print(node + " ");
visited[node] = true;
for (int i : A[node]) {
if (!visited[i])
DFS(i);
}
}
static void BFS(int node) {
Queue<Integer> queue = new LinkedList<>();
queue.add(node);
visited[node] = true;
while(!queue.isEmpty()) {
int now = queue.poll();
System.out.print(now + " ");
for (int i : A[now]) {
if (!visited[i]) {
queue.add(i);
visited[i] = true;
}
}
}
}
}