diff --git "a/\353\260\261\354\244\200/Silver/1260.\342\200\205DFS\354\231\200\342\200\205BFS/DFS\354\231\200\342\200\205BFS.java" "b/\353\260\261\354\244\200/Silver/1260.\342\200\205DFS\354\231\200\342\200\205BFS/DFS\354\231\200\342\200\205BFS.java" new file mode 100644 index 0000000..751162f --- /dev/null +++ "b/\353\260\261\354\244\200/Silver/1260.\342\200\205DFS\354\231\200\342\200\205BFS/DFS\354\231\200\342\200\205BFS.java" @@ -0,0 +1,94 @@ + +import java.io.*; +import java.io.IOException; +import java.util.*; + +public class Main { + 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()); + Map> temp = new HashMap<>(); + for (int i = 0; i < m; i++) { + StringTokenizer st1 = new StringTokenizer(br.readLine(), " "); + int a = Integer.parseInt(st1.nextToken()); + int b = Integer.parseInt(st1.nextToken()); + if (temp.containsKey(a)) { + temp.get(a).add(b); + } + if (temp.containsKey(b)) { + temp.get(b).add(a); + } + if (!temp.containsKey(a)) { + temp.put(a, new ArrayList<>()); + temp.get(a).add(b); + } + if (!temp.containsKey(b)) { + temp.put(b, new ArrayList<>()); + temp.get(b).add(a); + } + } + for (Map.Entry> entry : temp.entrySet()) { + Collections.sort(entry.getValue()); + } + + DFS(temp, v); + System.out.println(); + BFS(temp, v); + } + + private static void DFS(Map> temp, int start) { + if (!temp.containsKey(start)) { + System.out.print(start); + return; + } + Stack stack = new Stack<>(); + List visit = new ArrayList<>(); + + stack.add(start); + + while (!stack.isEmpty()) { + int n = stack.pop(); + //이미 방문했으면 + if (!visit.contains(n)) { + visit.add(n); + List var = temp.get(n); + + for (int i = var.size() - 1; i >= 0; i--) { + stack.add(var.get(i)); + + } + } + } + for (var a : visit) { + System.out.print(a + " "); + } + } + + private static void BFS(Map> temp, int start) { + if (!temp.containsKey(start)) { + System.out.println(start); + return; + } + Queue queue = new LinkedList<>(); + List visit = new ArrayList<>(); + queue.add(start); + while (!queue.isEmpty()) { + int n = queue.poll(); + + if (!visit.contains(n)) { + visit.add(n); + List var = temp.get(n); + for (int i = 0; i <= var.size() - 1; i++) { + queue.add(var.get(i)); + + } + } + } + for (var a : visit) { + System.out.print(a + " "); + } + } +} \ No newline at end of file diff --git "a/\353\260\261\354\244\200/Silver/1260.\342\200\205DFS\354\231\200\342\200\205BFS/README.md" "b/\353\260\261\354\244\200/Silver/1260.\342\200\205DFS\354\231\200\342\200\205BFS/README.md" new file mode 100644 index 0000000..235b80e --- /dev/null +++ "b/\353\260\261\354\244\200/Silver/1260.\342\200\205DFS\354\231\200\342\200\205BFS/README.md" @@ -0,0 +1,28 @@ +# [Silver II] DFS와 BFS - 1260 + +[문제 링크](https://www.acmicpc.net/problem/1260) + +### 성능 요약 + +메모리: 23024 KB, 시간: 384 ms + +### 분류 + +그래프 이론, 그래프 탐색, 너비 우선 탐색, 깊이 우선 탐색 + +### 제출 일자 + +2024년 10월 2일 22:02:34 + +### 문제 설명 + +

그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.

+ +### 입력 + +

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다.

+ +### 출력 + +

첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다.

+