[BFS] 14. κ·Έλν μ΅λ¨ 거리
<<νμ΄>>
μ΄ λ¬Έμ λ 1λ² μ μ μμ κ° μ μ κΉμ§μ μ΅μ κ°μ μλ₯Ό ꡬνλ λ¬Έμ μ΄λ€.
Levelλ‘ ν μλ μμ§λ§, κ·Έ μΈμ disλΌλ λ°°μ΄μ μ¬μ©νλ€. μ΄λ 1μμ λΆν° ν΄λΉ κ°κΉμ§ μ€κΈ° μν κ°μ μ μλ₯Ό μ μ₯ν΄λκ³ μλ€.
κ·Έλ¦¬κ³ μμ§ λ±λ‘μ΄ λμ§ μμ κ°λ€μ μ°κ²°λμ΄ μλ μ΄μ κ°λ€ κΉμ§ μ€κΈ° κΉμ§μ κ°μ μ μμ + 1μ ν΄μ€λ€.
κ·Έλ κ² ν΄μ μ΅μ’ μ μΌλ‘ disμ λ°μ΄ν°λ μΈλ±μ€ κ°μ 1μμ 2, 3, 4, 5 λ‘ νΉμ μμΉλ‘ κ°λ€κ³ λͺ ννκ² νμνκ³ κ·Έ λ κ°μ κ°μ κ°μ§κ³ μλ€.
*μΈλ±μ€ κ°μ΄ μ€μ κ° 1, 2, 3 λ±μΌλ‘ ννν΄μ λͺ ννκ² νκΈ° μν΄μ μ΄κΈ° λ°°μ΄ μ μΈ λΆν° [n] μ΄ μλ [n + 1]λ‘ μ§μ νλ€.
*λ§μ½ 1 -> 2λ‘ κ°λ κ²λ μμ§λ§ 1 -> 3 -> 2λ‘ κ°λ κ²λ μλ€λ©΄ μ΄λ»κ² μ΅μ κ°μ μΈ κ²μ ꡬλΆνμ§? λΌλ μκ°μ μ΄κΈ°μ νλλ° μκ°ν΄λ³΄λκΉ ch[] λΌλ 체ν¬νλ λ°°μ΄λ‘ ν΅ν΄μ μ΄λ―Έ κ° κ³³μ 1λ‘ λκΈ° λλ¬Έμ μ¬μ μ 1 -> 2λ‘ κ° κ²μ΄ μλ€λ©΄ 1 -> 3 -> 2λ‘ κ°λ κ²μ λΊ μ μλ κ²μ΄λ€.
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class Main {
static int n, m;
static ArrayList<ArrayList<Integer>> graph;
static int[] ch, dis;
public void BFS(int v) {
Queue<Integer> queue = new LinkedList<>();
ch[v] = 1;
dis[v] = 0;
queue.offer(v);
while (!queue.isEmpty()) {
int cv = queue.poll();
for(int nv : graph.get(cv)) {
if (ch[nv] == 0) {
ch[nv] = 1;
queue.offer(nv);
dis[nv] = dis[cv] + 1;
}
}
}
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
n = in.nextInt();
m = in.nextInt();
graph = new ArrayList<ArrayList<Integer>>();
for (int i = 0; i <= n; i++) {
graph.add(new ArrayList<Integer>());
}
ch = new int[n + 1];
dis = new int[n + 1];
for (int i = 0; i < m; i++) {
int a = in.nextInt();
int b = in.nextInt();
graph.get(a).add(b);
}
T.BFS(1);
for (int i = 2; i <= n; i++) {
System.out.println(i + " : " + dis[i]);
}
}
}
μ¬κΈ°κΉμ§ DFS BFS μ μ¬λ¬κ°μ§ λ¬Έμ νμμ μ ν΄λ³΄μλ€. μ΄ν΄λ νμ§λ§ μμ§κΉμ§ μλ²½ν λ΄ κ²μ μλ κ² κ°λ€. μ΄μ λΆν° 본격μ μΌλ‘ κΈ°μΆμ νμ΄ λ³Όν λ° μμ ν λ΄ κ²μ΄ λ μ μλλ‘ κ³΅λΆν΄λ³΄μ!!