From b0652485ae7db831c1995ff0ac8c45a20ac15644 Mon Sep 17 00:00:00 2001 From: mong3125 Date: Sun, 10 Mar 2024 19:03:57 +0900 Subject: [PATCH] =?UTF-8?q?BOJ1260=5FDFS=EC=99=80BFS=ED=94=84=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EB=9E=A8=20java=20solution?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\353\241\234\352\267\270\353\236\250.java" | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 "mong3125/BFS/BOJ1260_DFS\354\231\200BFS\355\224\204\353\241\234\352\267\270\353\236\250.java" diff --git "a/mong3125/BFS/BOJ1260_DFS\354\231\200BFS\355\224\204\353\241\234\352\267\270\353\236\250.java" "b/mong3125/BFS/BOJ1260_DFS\354\231\200BFS\355\224\204\353\241\234\352\267\270\353\236\250.java" new file mode 100644 index 0000000..9862aae --- /dev/null +++ "b/mong3125/BFS/BOJ1260_DFS\354\231\200BFS\355\224\204\353\241\234\352\267\270\353\236\250.java" @@ -0,0 +1,84 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + +public class BOJ1260_DFS와BFS프로그램 { + + static ArrayList[] edges; + static boolean[] visited; + static StringBuilder answer = new StringBuilder(); + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int n = Integer.parseInt(st.nextToken()); // 노드 수 + int m = Integer.parseInt(st.nextToken()); // 간선 수 + int v = Integer.parseInt(st.nextToken()); // 출발 노드 + + edges = new ArrayList[n + 1]; // 간선 배열 + for (int i = 0; i < n + 1; i++) { + edges[i] = new ArrayList<>(); + } + + // 간선 연결 + for (int i = 0; i < m; i++) { + st = new StringTokenizer(br.readLine()); + int a = Integer.parseInt(st.nextToken()); + int b = Integer.parseInt(st.nextToken()); + + edges[a].add(b); + edges[b].add(a); + } + + for (int i = 0; i < n + 1; i++) { + Collections.sort(edges[i]); + } + + visited = new boolean[n + 1]; // 방문 여부 배열 + dfs(v); + answer.append('\n'); + + visited = new boolean[n + 1]; + bfs(v); + answer.append('\n'); + + System.out.print(answer); + } + + public static void dfs(int now) { + answer.append(now); + answer.append(' '); + + visited[now] = true; + + for (int next : edges[now]) { + if (!visited[next]) { + dfs(next); + } + } + } + + public static void bfs(int start) { + Queue queue = new LinkedList<>(); + + // 시작 노드 삽입하기 + queue.add(start); + visited[start] = true; + + // 큐가 빌때까지 반복 + while (!queue.isEmpty()) { + int now = queue.poll(); + answer.append(now); + answer.append(' '); + + // now에 연결된 node들을 queue에 삽입한다. + for (int next : edges[now]) { + if (!visited[next]) { + queue.add(next); + visited[next] = true; + } + } + } + } +}