π [λ°±μ€μκ³ λ¦¬μ¦ νμ΄] Q.2606 λ°μ΄λ¬μ€ λ¬Έμ νμ΄ - java
π λ¬Έμ
https://www.acmicpc.net/problem/2606
μ μ’ λ°μ΄λ¬μ€μΈ μ λ°μ΄λ¬μ€λ λ€νΈμν¬λ₯Ό ν΅ν΄ μ νλλ€. ν μ»΄ν¨ν°κ° μ λ°μ΄λ¬μ€μ 걸리면
κ·Έ μ»΄ν¨ν°μ λ€νΈμν¬ μμμ μ°κ²°λμ΄ μλ λͺ¨λ μ»΄ν¨ν°λ μ λ°μ΄λ¬μ€μ κ±Έλ¦¬κ² λλ€.
μλ₯Ό λ€μ΄ 7λμ μ»΄ν¨ν°κ° <κ·Έλ¦Ό 1>κ³Ό κ°μ΄ λ€νΈμν¬ μμμ μ°κ²°λμ΄ μλ€κ³ νμ.
1λ² μ»΄ν¨ν°κ° μ λ°μ΄λ¬μ€μ 걸리면 μ λ°μ΄λ¬μ€λ 2λ²κ³Ό 5λ² μ»΄ν¨ν°λ₯Ό κ±°μ³ 3λ²κ³Ό 6λ² μ»΄ν¨ν°κΉμ§ μ νλμ΄
2, 3, 5, 6 λ€ λμ μ»΄ν¨ν°λ μ λ°μ΄λ¬μ€μ κ±Έλ¦¬κ² λλ€. νμ§λ§ 4λ²κ³Ό 7λ² μ»΄ν¨ν°λ 1λ² μ»΄ν¨ν°μ λ€νΈμν¬μμμ
μ°κ²°λμ΄ μμ§ μκΈ° λλ¬Έμ μν₯μ λ°μ§ μλλ€.
μ΄λ λ 1λ² μ»΄ν¨ν°κ° μ λ°μ΄λ¬μ€μ κ±Έλ Έλ€. μ»΄ν¨ν°μ μμ λ€νΈμν¬ μμμ μλ‘ μ°κ²°λμ΄ μλ μ λ³΄κ° μ£Όμ΄μ§ λ,
1λ² μ»΄ν¨ν°λ₯Ό ν΅ν΄ μ λ°μ΄λ¬μ€μ κ±Έλ¦¬κ² λλ μ»΄ν¨ν°μ μλ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
π μ κ·Όλ²
Q.2606 λ°μ΄λ¬μ€ λ¬Έμ νμ΄μ λλ€.
ν μ»΄ν¨ν°κ° λ°μ΄λ¬μ€μ κ±Έλ Έμ λ
μ°κ²°λ λ€νΈμν¬(κ·Έλν)λ₯Ό ν΅ν΄ λ°μ΄λ¬μ€κ° μ°κ²°λ μ»΄ν¨ν°μ μ νλ©λλ€.
1λ² μ»΄ν¨ν°κ° λ°μ΄λ¬μ€μ κ±Έλ Έμ λ
μ΄ λͺ λμ μ»΄ν¨ν°μ μ νλλμ§λ₯Ό ꡬνλ λ¬Έμ μ λλ€.
κ·Έλν νμ λ¬Έμ λ‘ μΈμ 리μ€νΈλ‘ λ€νΈμν¬(κ·Έλν)λ₯Ό νννκ³
bfs λ dfs νμμ ν΅ν΄ λͺ λμ μ»΄ν¨ν°μ μ νλλμ§λ₯Ό ꡬν μ μμ΅λλ€.
λ¬Έμ μ μ£Όμ΄μ§ κ²μ²λΌ μΆλ° μ§μ μ 1λ² μ»΄ν¨ν°λ‘ κ³ μ λμ΄ μμΌλ―λ‘
bfs λ dfs νμμ 1λ²λΆν° μμνλ©΄ λ©λλ€. μλ‘μ΄ μ»΄ν¨ν°μ μ νλ λλ§λ€
μλ‘ λ°μ΄λ¬μ€μ κ±Έλ¦° λμλ₯Ό λλ €μ£Όλ©΄ λ΅μ ꡬν μ μμ΅λλ€. (count++)
bfs νμ dfs νμμ λͺ¨λ ꡬννμμ΅λλ€.
π» μ½λ
package problem.bfsdfs;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class Main_2606 {
static int N, M;
static boolean[] visit;
static List<List<Integer>> adList;
static int count = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
M = Integer.parseInt(br.readLine());
adList = new ArrayList<>();
for (int i = 0; i < N + 1; i++) {
adList.add(new <Integer>ArrayList());
}
visit = new boolean[N + 1];
for (int i = 0; i < M; i++) {
String temp[] = br.readLine().split(" ");
int u = Integer.parseInt(temp[0]);
int v = Integer.parseInt(temp[1]);
adList.get(u).add(v);
adList.get(v).add(u);
}
dfs(1);
System.out.println(count);
br.close();
}
public static void bfs(int num) {
Queue<Integer> queue = new LinkedList<>();
visit[num] = true;
queue.add(num);
while (!queue.isEmpty()) {
int currentNum = queue.poll();
for (int i : adList.get(currentNum)) {
if (visit[i] == false) {
visit[i] = true;
queue.add(i);
count++;
}
}
}
}
public static void dfs(int num) {
visit[num] = true;
for (int i : adList.get(num)) {
if (visit[i] == false) {
dfs(i);
count++;
}
}
}
}