π Today I Learned - μ€λ λ΄κ° 곡λΆν κ²μ μ 리ν©λλ€.

μμ κ°μ κ·Έλνκ° μ‘΄μ¬νκ³ λ Έλμ νμμ 1λ² λΆν° μμ.
package Algorithm;
import java.util.LinkedList;
import java.util.Queue;
public class Bfs {
public static void main(String[] args) {
// κ·Έλνλ₯Ό 2μ°¨μ λ°°μ΄λ‘ νν
// λ°°μ΄μ μΈλ±μ€λ₯Ό λ
Έλμ λ§€μΉμμΌμ μ¬μ©νκΈ° μν΄ μΈλ±μ€ 0μ μ무κ²λ μ μ₯νμ§ μλλ€.
// 1λ² μΈλ±μ€λ 1λ² λ
Έλλ₯Ό λ»νκ³ λ
Έλμ λ°°μ΄μ κ°μ μ°κ²°λ λ
Έλλ₯Ό λ»ν¨.
int[][] graph = {{}, {2, 3, 8}, {1, 6, 8}, {1, 5}, {5, 7}, {3, 4, 7}, {2}, {4, 5}, {1, 2}};
// λ°©λ¬Έ μ²λ¦¬λ₯Ό μν boolean λ°°μ΄ μ μΈ
boolean[] visited = new boolean[graph.length];
System.out.println(bfs(1, graph, visited));
}
public static String bfs(int start, int[][] graph, boolean[] visited) {
// νμ μμλ₯Ό μΆλ ₯νκΈ° μν μ©λ
StringBuilder sb = new StringBuilder();
// BFSμ μ¬μ©ν νλ₯Ό μμ±
Queue<Integer> queue = new LinkedList<>();
// νμ BFSλ₯Ό μμ ν λ
Έλ λ²νΈλ₯Ό λ£κΈ°
queue.offer(start);
// μμλ
Έλ λ°©λ¬Έμ²λ¦¬
visited[start] = true;
// νκ° λΉ λκΉμ§ λ°λ³΅
while (!queue.isEmpty()) {
int nodeIndex = queue.poll();
sb.append(nodeIndex + " -> "); // λ
Έλ μμ
// νμμ κΊΌλΈ λ
Έλμ μ°κ²°λ λ
Έλλ€ μ²΄ν¬
for (int i = 0; i < graph[nodeIndex].length; i++) {
int temp = graph[nodeIndex][i];
// λ°©λ¬Ένμ§ μμμΌλ©΄ λ°©λ¬Έμ²λ¦¬ ν νμ λ£κΈ°
if (!visited[temp]) {
visited[temp] = true;
queue.offer(temp);
}
}
}
// νμ μμ 리ν΄
sb = sb.delete(sb.length() - 3, sb.length()); // λ§μ§λ§ -> μ κ±°
return sb.toString();
}
}

μμ κ°μ κ·Έλνκ° μ‘΄μ¬νκ³ λ
Έλμ νμμ 1λ² λΆν° μμ.
μ₯μ
κ²½λ‘μ νΉμ§μ μ μ₯ν΄λ¬μΌ νλ λ¬Έμ λ κ²μ λμ κ·Έλν λ¬Έμ λ±μ μ¬μ©
package Algorithm;
public class Dfs {
// κ·Έλνλ₯Ό 2μ°¨μ λ°°μ΄λ‘ νν
// λ°°μ΄μ μΈλ±μ€λ₯Ό λ
Έλμ λ§€μΉμμΌμ μ¬μ©νκΈ° μν΄ μΈλ±μ€ 0μ μ무κ²λ μ μ₯νμ§ μλλ€.
// 1λ² μΈλ±μ€λ 1λ² λ
Έλλ₯Ό λ»νκ³ λ
Έλμ λ°°μ΄μ κ°μ μ°κ²°λ λ
Έλλ₯Ό λ»ν¨.
static int[][] graph = {{}, {2, 3, 8}, {1, 6, 8}, {1, 5}, {5, 7}, {3, 4, 7}, {2}, {4, 5}, {1, 2}};
static boolean[] visited = new boolean[graph.length];
static int count;
public static void main(String[] args) {
dfs(1);
}
static void dfs(int nodeIndex) {
// λ°©λ¬Έ μ²λ¦¬
visited[nodeIndex] = true;
count++;
// λ°©λ¬Έ λ
Έλ μΆλ ₯
System.out.print(nodeIndex);
if (count != graph.length - 1) {
System.out.print(" -> "); // λ§μ§λ§ -> μΆλ ₯νμ§ μμ
}
// λ°©λ¬Έν λ
Έλμ μΈμ ν λ
Έλ μ°ΎκΈ°
for (int node : graph[nodeIndex]) {
// μΈμ ν λ
Έλκ° λ°©λ¬Έν μ μ΄ μλ€λ©΄ DFS μν
if (!visited[node]) {
dfs(node); // μ¬κ·
}
}
}
}
μ¬μ©νλ κ²½μ°
λ λ
Έλ μ¬μ΄μ μ΅λ¨ κ²½λ‘ νΉμ μμμ κ²½λ‘λ₯Ό μ°Ύκ³ μΆμ λ μ ν
λλΉ μ°μ νμ(BFS)μ΄ κΉμ΄ μ°μ νμ(DFS)λ³΄λ€ λ 볡μ‘νλ€.
π μ°Έκ³ μλ£
https://codingnojam.tistory.com/41
https://codingnojam.tistory.com/44
π μλ°λ‘ λλ§μ μκ³ λ¦¬μ¦ λ ΈνΈ λ§λ€κΈ°