728x90
๋ฐ์ํ
๊น์ด ์ฐ์ ํ์ DFS (Depth-First Search)
- ์์ ๋ ธ๋ ์ ํ: ํ์์ ์์ํ ๋ ธ๋๋ฅผ ์ ํํฉ๋๋ค.
- ๋ ธ๋ ๋ฐฉ๋ฌธ: ํ์ฌ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ , ๋ฐฉ๋ฌธํ๋ค๊ณ ํ์ํฉ๋๋ค.
- ์ธ์ ๋ ธ๋ ํ์: ํ์ฌ ๋ ธ๋์ ์ธ์ ํ ๋ ธ๋๋ค ์ค ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ก ์ด๋ํฉ๋๋ค.
- ๋ฐ๋ณต: ๋ ์ด์ ๋ฐฉ๋ฌธํ ๋ ธ๋๊ฐ ์์ ๋๊น์ง ์ธ์ ๋ ธ๋๋ก ์ด๋ํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค. ๋ชจ๋ ์ธ์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค๋ฉด, ์ด์ ๋ ธ๋๋ก ๋์๊ฐ์ ๋ค์ ์ธ์ ๋ ธ๋๋ฅผ ํ์ํฉ๋๋ค.
DFS์ ํ์ฉ
- ๋ฏธ๋ก ์ฐพ๊ธฐ: DFS๋ ๋ฏธ๋ก ์ฐพ๊ธฐ์ ๊ฐ์ ๊ฒฝ๋ก ํ์ ๋ฌธ์ ์ ์ ์ฉํฉ๋๋ค.
- ์ฌ์ดํด ํ์ง: ๊ทธ๋ํ์์ ์ฌ์ดํด์ด ์กด์ฌํ๋์ง ํ์ธํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ฐ๊ฒฐํฉ ์์ ์ฐพ๊ธฐ: DFS๋ ๊ทธ๋ํ์์ ๊ฐ๊ฒฐํฉ ์์๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ณธ์ด ๋ฉ๋๋ค.
- ์์ ์ ๋ ฌ: ์ ํฅ ๋น์ํ ๊ทธ๋ํ(DAG)์์ ์์ ์ ๋ ฌ์ ์ํํ ๋ DFS๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฅ์
- ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ : ํ์ฌ ๊ฒฝ๋ก๋ง์ ๊ธฐ์ตํ๊ธฐ ๋๋ฌธ์, ๋๊ท๋ชจ ๊ทธ๋ํ์์๋ ์๋์ ์ผ๋ก ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๊ตฌํ ์ฉ์ด์ฑ : ์ฌ๊ท๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์์ผ๋ฉฐ, ์ฝ๋๊ฐ ์ง๊ด์ ์ด๊ณ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
- ๋ถ๋ถ ๋ฌธ์ ํด๊ฒฐ : ๋ฐฑํธ๋ํน ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๋ฌธ์ (์: ํผ์ฆ, ๋ฏธ๋ก ํ์)์์ ์ ์ฉํฉ๋๋ค.
- ํ์ ๊น์ด :๋ชฉํ ๋ ธ๋๊ฐ ๊น์ ๊ณณ์ ์์ ๋ ํจ์จ์ ์ผ๋ก ์ฐพ์ ์ ์์ต๋๋ค.
๋จ์
- ๋ฌดํ ๋ฃจํ ๊ฐ๋ฅ์ฑ : ์ํ ๊ทธ๋ํ์์ ๋ฐฉ๋ฌธํ ๋ ธ๋๋ฅผ ์ถ์ ํ์ง ์์ผ๋ฉด ๋ฌดํ ๋ฃจํ์ ๋น ์ง ์ ์์ต๋๋ค.
- ๋ถํ์ํ ๊ฒฝ๋ก ํ์ : ๋ถํ์ํ๊ฒ ๊น์ ๊ฒฝ๋ก๊น์ง ํ์ํ ์ ์์ด, ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฐ ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค.
- ์คํ ์ค๋ฒํ๋ก์ฐ : ์ฌ๊ท ํธ์ถ์ด ๋๋ฌด ๊น์ด์ง๋ฉด ์คํ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์ต๋จ ๊ฒฝ๋ก ํ์์ ๋ถ์ ํฉ์ฑ : DFS๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฅํ์ง ์์ผ๋ฏ๋ก, ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ์๋ ์ ํฉํ์ง ์์ต๋๋ค.
๊ตฌํ
- ์ ์ v ๋ฐฉ๋ฌธํ๋ค.
- ์ ์ v์์ ์ธ์ ํ ์ ์ ์ค์ ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ w๊ฐ ์๋ค๋ฉด w๋ฅผ v๋ก ํ์ฌ 1๋ถํฐ ๋ฐ๋ณตํ๋ค(์ฌ๊ทํจ์ ํธ์ถ).
- ์ธ์ ํ ์ ์ ๋ชจ๋ ๋ฐฉ๋ฌธํ๋ค๋ฉด ์คํ์์ ์ ์ ์ ๊บผ๋ด ์๋ฅผ ๋ฐ๋ณตํ๋ค.
// ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด
static boolean[] visit;
// ๊ทธ๋ํ๋ฅผ ๋ํ๋ด๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๋ฐฐ์ด ๋๋ ์ธ์ ํ๋ ฌ
static LinkedList<Integer>[] graph;
static int[][] adjMatrix;
// DFS ํ์ ๋ฉ์๋
public static void dfs(int v) {
visit[v] = true; // ํ์ฌ ๋
ธ๋ v๋ฅผ ๋ฐฉ๋ฌธํ์์ ํ์ํฉ๋๋ค.
System.out.println(v); // ๋ฐฉ๋ฌธํ ๋
ธ๋๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
// ํ์ฌ ๋
ธ๋ v์ ์ธ์ ํ ๋ชจ๋ ๋ฏธ๋ฐฉ๋ฌธ ๋
ธ๋์ ๋ํด ์ฌ๊ท์ ์ผ๋ก DFS๋ฅผ ํธ์ถํฉ๋๋ค.
for (int nextV : graph[v]) {
if (!visit[nextV]) {
dfs(nextV); // ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋
ธ๋์ ๋ํด DFS ํธ์ถ
}
}
}
์ถ๋ ฅ
1 2 4 6 5 3
1. ์ฌ๊ทํธ์ถ
import java.util.*;
class Graph {
private LinkedList<Integer> adj[]; // ๊ฐ ์ ์ ์ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด
// ๊ทธ๋ํ ์์ฑ์: ์ ์ ์ ์์ ๋ฐ๋ผ ์ธ์ ๋ฆฌ์คํธ ๋ฐฐ์ด ์ด๊ธฐํ
Graph(int v) {
adj = new LinkedList[v];
for (int i = 0; i < v; ++i)
adj[i] = new LinkedList(); // ๊ฐ ์ ์ ์ ๋ํ ์ธ์ ๋ฆฌ์คํธ ์ด๊ธฐํ
}
// ๊ทธ๋ํ์ ๊ฐ์ ์ถ๊ฐ ๋ฉ์๋
void addEdge(int v, int w) {
adj[v].add(w); // ์ ์ v์์ ์ ์ w๋ก ๊ฐ๋ ๊ฐ์ ์ถ๊ฐ
}
// ์ฌ๊ท์ ์ผ๋ก DFS๋ฅผ ์ํํ๋ ์ ํธ๋ฆฌํฐ ๋ฉ์๋
void DFSUtil(int v, boolean visited[]) {
visited[v] = true; // ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์์ ํ์
System.out.print(v + " "); // ๋ฐฉ๋ฌธํ ๋
ธ๋๋ฅผ ์ถ๋ ฅ
// ํ์ฌ ๋
ธ๋์ ์ธ์ ํ ๋ชจ๋ ๋ฏธ๋ฐฉ๋ฌธ ๋
ธ๋์ ๋ํด ์ฌ๊ท์ ์ผ๋ก DFSUtil ํธ์ถ
for (int n : adj[v]) {
if (!visited[n])
DFSUtil(n, visited); // ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋์ ๋ํด ์ฌ๊ท์ ์ผ๋ก DFSUtil ํธ์ถ
}
}
// DFS ํ์์ ์์ํ๋ ๋ฉ์๋
void DFS(int v) {
boolean visited[] = new boolean[adj.length]; // ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด ์ด๊ธฐํ
DFSUtil(v, visited); // DFSUtil ๋ฉ์๋ ํธ์ถ
}
// ๋ฉ์ธ ๋ฉ์๋
public static void main(String args[]) {
Graph g = new Graph(4); // ๊ทธ๋ํ ์์ฑ
// ๊ทธ๋ํ์ ๊ฐ์ ์ถ๊ฐ
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
// ์์ ๋
ธ๋ 2์์ DFS ํ์ ์์
System.out.println("Following is Depth First Traversal " +
"(starting from vertex 2)");
g.DFS(2); // DFS ํ์ ์์
}
}
2. ์คํ
import java.util.*;
class Graph {
private LinkedList<Integer> adj[]; // ๊ฐ ์ ์ ์ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด
// ๊ทธ๋ํ ์์ฑ์: ์ ์ ์ ์์ ๋ฐ๋ผ ์ธ์ ๋ฆฌ์คํธ ๋ฐฐ์ด ์ด๊ธฐํ
Graph(int v) {
adj = new LinkedList[v];
for (int i = 0; i < v; ++i)
adj[i] = new LinkedList(); // ๊ฐ ์ ์ ์ ๋ํ ์ธ์ ๋ฆฌ์คํธ ์ด๊ธฐํ
}
// ๊ทธ๋ํ์ ๊ฐ์ ์ถ๊ฐ ๋ฉ์๋
void addEdge(int v, int w) {
adj[v].add(w); // ์ ์ v์์ ์ ์ w๋ก ๊ฐ๋ ๊ฐ์ ์ถ๊ฐ
}
// ์คํ์ ์ด์ฉํ DFS ํ์ ๋ฉ์๋
void DFS(int v) {
boolean visited[] = new boolean[adj.length]; // ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด ์ด๊ธฐํ
Stack<Integer> stack = new Stack<>(); // ์คํ ์์ฑ
stack.push(v); // ์์ ๋
ธ๋๋ฅผ ์คํ์ push
visited[v] = true; // ์์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์์ ํ์
// ์คํ์ด ๋น ๋๊น์ง ๋ฐ๋ณต
while (!stack.isEmpty()) {
v = stack.pop(); // ์คํ์์ ๋
ธ๋ ํ๋๋ฅผ popํ์ฌ ๋ฐฉ๋ฌธ
System.out.print(v + " "); // ๋ฐฉ๋ฌธํ ๋
ธ๋ ์ถ๋ ฅ
// ํ์ฌ ๋
ธ๋์ ์ธ์ ํ ๋
ธ๋๋ค ์ค ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๋ฅผ ์คํ์ push
for (int n : adj[v]) {
if (!visited[n]) {
visited[n] = true; // ์ธ์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์์ ํ์
stack.push(n); // ์คํ์ push
}
}
}
}
// ๋ฉ์ธ ๋ฉ์๋
public static void main(String args[]) {
Graph g = new Graph(4); // ๊ทธ๋ํ ์์ฑ
// ๊ทธ๋ํ์ ๊ฐ์ ์ถ๊ฐ
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
// ์์ ๋
ธ๋ 2์์ ์คํ์ ์ด์ฉํ DFS ํ์ ์์
System.out.println("Following is Depth First Traversal " +
"(starting from vertex 2)");
g.DFS(2); // DFS ํ์ ์์
}
}
๋๋น์ฐ์ ํ์ BFS (Breadth-First Search)
- ์์ ๋ ธ๋ ์ ํ: ํ์์ ์์ํ ๋ ธ๋๋ฅผ ์ ํํฉ๋๋ค.
- ํ์ ์์ ๋ ธ๋ ์ฝ์ : ์์ ๋ ธ๋๋ฅผ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธํ๋ค๊ณ ํ์ํฉ๋๋ค.
- ํ์์ ๋ ธ๋ ์ถ์ถ: ํ์์ ๋ ธ๋๋ฅผ ํ๋ ์ถ์ถํ์ฌ ๋ฐฉ๋ฌธํฉ๋๋ค.
- ์ธ์ ๋ ธ๋ ํ์ ์ฝ์ : ๋ฐฉ๋ฌธํ ๋ ธ๋์ ์ธ์ ๋ ธ๋๋ค ์ค ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ฅผ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธํ๋ค๊ณ ํ์ํฉ๋๋ค.
- ๋ฐ๋ณต: ํ๊ฐ ๋น ๋๊น์ง 3-4๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
- ์ต๋จ ๊ฒฝ๋ก: ๋ฌด๊ฐ์ค์น ๊ทธ๋ํ์์ BFS๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฅํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: ํ์ ๋ ธ๋๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์, ํ ๋ฒ์ ๋ง์ ๋ ธ๋๋ฅผ ์ ์ฅํด์ผ ํ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ง์์ง ์ ์์ต๋๋ค.
- ๋์ด ์ฐ์ ํ์: ๊ฐ ๋ ๋ฒจ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ ํ ๋ค์ ๋ ๋ฒจ๋ก ์ด๋ํฉ๋๋ค.
BFS์ ์ฅ๋จ์
์ฅ์
- ์ต๋จ ๊ฒฝ๋ก ํ์: ๋ฌด๊ฐ์ค์น ๊ทธ๋ํ์์ ๋ ๋ ธ๋ ๊ฐ์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
- ๊ตฌํ ์ฉ์ด์ฑ: ํ๋ฅผ ์ด์ฉํ ๊ตฌํ์ด ์ง๊ด์ ์ด๊ณ ๊ฐ๋จํฉ๋๋ค.
- ๋ ๋ฒจ ์ ํ์: ํน์ ๋ ๋ฒจ๊น์ง์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
๋จ์
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: ๋๋น ์ฐ์ ํ์์ ํ์ ๋ง์ ๋ ธ๋๋ฅผ ์ ์ฅํด์ผ ํ ์ ์์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ง์์ง ์ ์์ต๋๋ค.
- ๊น์ ๊ทธ๋ํ์์ ๋นํจ์จ์ : ๊น์ด๊ฐ ๊น์ ๊ทธ๋ํ์์๋ ๋ง์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํด์ผ ํ๋ฏ๋ก ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค.
๊ตฌํ
- ์ ์ v ๋ฐฉ๋ฌธํ๋ค.
- ์ ์ v์ ์ธ์ ํ ์ ์ ์ค ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ ์ฐจ๋ก๋ก ๋ฐฉ๋ฌธํ๋ฉด์ ํ์ ๋ฃ๋๋ค.
- ์ธ์ ํ ์ ์ ๋ชจ๋ ๋ฐฉ๋ฌธํ๋ค๋ฉด ํ์์ dqueueํ์ฌ ๋ฐ์ ๊ฐ ์ ์ v๋ก ์ค์ ํ๊ณ 2๋ฅผ ๋ฐ๋ณตํ๋ค.
- ํ๊ฐ ๊ณต๋ฐฑ์ด๋ผ๋ฉด ํ์ ์๋ฃํ ๊ฒ์ด๋ค.
// ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด
static boolean[] visit;
// ๊ทธ๋ํ๋ฅผ ๋ํ๋ด๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๋ฐฐ์ด ๋๋ ์ธ์ ํ๋ ฌ
static LinkedList<Integer>[] graph;
static int[][] adjMatrix;
// BFS ํ์ ๋ฉ์๋
public static void bfs(int v) {
Queue<Integer> queue = new LinkedList<>(); // BFS๋ฅผ ์ํ ํ ์์ฑ
queue.add(v); // ์์ ์ ์ v๋ฅผ ํ์ ๋ฃ๊ธฐ
visit[v] = true; // ์์ ์ ์ v๋ฅผ ๋ฐฉ๋ฌธํ์์ ํ์
while (!queue.isEmpty()) {
int temp = queue.poll(); // ํ์์ ํ๋์ ๋
ธ๋๋ฅผ ๊บผ๋ด์ด ๋ฐฉ๋ฌธ
System.out.println(temp); // ๋ฐฉ๋ฌธํ ๋
ธ๋๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
// ํ์ฌ ๋
ธ๋ temp์ ์ธ์ ํ ๋ชจ๋ ๋ฏธ๋ฐฉ๋ฌธ ๋
ธ๋๋ค์ ํ์ ์ถ๊ฐํฉ๋๋ค.
for (int nextV : graph[temp]) {
if (!visit[nextV]) {
queue.add(nextV); // ์ธ์ ๋
ธ๋๋ฅผ ํ์ ์ถ๊ฐ
visit[nextV] = true; // ์ธ์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์์ ํ์
}
}
}
}
์ถ๋ ฅ
1 2 3 4 5 6
1. ํ๋ฅผ ์ด์ฉํ ๊ตฌํ
import java.util.*;
class Graph {
private LinkedList<Integer> adj[]; // ๊ฐ ์ ์ ์ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด
// ๊ทธ๋ํ ์์ฑ์: ์ ์ ์ ์์ ๋ฐ๋ผ ์ธ์ ๋ฆฌ์คํธ ๋ฐฐ์ด ์ด๊ธฐํ
Graph(int v) {
adj = new LinkedList[v];
for (int i = 0; i < v; ++i)
adj[i] = new LinkedList(); // ๊ฐ ์ ์ ์ ๋ํ ์ธ์ ๋ฆฌ์คํธ ์ด๊ธฐํ
}
// ๊ทธ๋ํ์ ๊ฐ์ ์ถ๊ฐ ๋ฉ์๋
void addEdge(int v, int w) {
adj[v].add(w); // ์ ์ v์์ ์ ์ w๋ก ๊ฐ๋ ๊ฐ์ ์ถ๊ฐ
}
// BFS ํ์ ๋ฉ์๋
void BFS(int v) {
boolean visited[] = new boolean[adj.length]; // ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด ์ด๊ธฐํ
LinkedList<Integer> queue = new LinkedList<>(); // ํ ์์ฑ
visited[v] = true; // ์์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์์ ํ์
queue.add(v); // ์์ ๋
ธ๋๋ฅผ ํ์ ์ถ๊ฐ
while (!queue.isEmpty()) {
v = queue.poll(); // ํ์์ ํ๋์ ๋
ธ๋๋ฅผ ๊บผ๋ด์ด ๋ฐฉ๋ฌธ
System.out.print(v + " "); // ๋ฐฉ๋ฌธํ ๋
ธ๋ ์ถ๋ ฅ
// ํ์ฌ ๋
ธ๋์ ์ธ์ ํ ๋ชจ๋ ๋ฏธ๋ฐฉ๋ฌธ ๋
ธ๋๋ค์ ํ์ ์ถ๊ฐ
for (int n : adj[v]) {
if (!visited[n]) {
visited[n] = true; // ์ธ์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์์ ํ์
queue.add(n); // ํ์ ์ถ๊ฐ
}
}
}
}
// ๋ฉ์ธ ๋ฉ์๋
public static void main(String args[]) {
Graph g = new Graph(4); // ๊ทธ๋ํ ์์ฑ
// ๊ทธ๋ํ์ ๊ฐ์ ์ถ๊ฐ
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
// ์์ ๋
ธ๋ 2์์ BFS ํ์ ์์
System.out.println("Following is Breadth First Traversal " +
"(starting from vertex 2)");
g.BFS(2); // BFS ํ์ ์์
}
}
DFS ์ BFS ๋น๊ต
๋น๊ต ์์ฝ
DFS๋ ๊น์ด ์ฐ์ ํ์์ด๋ฏ๋ก ๊น์ด๋ฅผ ์ฐ์ ์ผ๋ก ํ์ํฉ๋๋ค.
- ์ฌ๊ท์ ์ผ๋ก ๊ตฌํํ ์ ์์ด ๊ตฌํ์ด ๊ฐ๋จํ๊ณ , ๋ฐฑํธ๋ํน์ ์ ์ฉํ์ง๋ง
- ์ต๋จ ๊ฒฝ๋ก ํ์ ๋ฑ์๋ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
BFS๋ ๋๋น๋ฅผ ์ฐ์ ์ผ๋ก ํ์ํ์ฌ
- ์ต๋จ ๊ฒฝ๋ก ๋ฌธ์ ์ ์ ๋ฆฌํ๋ฉฐ, ๋คํธ์ํฌ ๋ฌธ์ ๋ ์ต์ ๊ฒฝ๋ก ํ์์ ์ ํฉํฉ๋๋ค.
- ๊ทธ๋ฌ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ง์ ์ ์๊ณ , ๊น์ด๊ฐ ๊น์ ๊ฒฝ์ฐ์๋ ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค.
์ฐธ๊ณ
https://scshim.tistory.com/241
[Algorithm] DFS์ BFS๋? ์๋ ๋ฐฉ์๊ณผ ๊ตฌํ ๋ฐฉ๋ฒ(with ์๋ฐ)
DFS์ BFS๋? ์๋ ๋ฐฉ์๊ณผ ๊ตฌํ ๋ฐฉ๋ฒ(with ์๋ฐ) ์ด ๊ธ์ DFS์ BFS ๊ฐ๋ ์ ๋ํด ์ค๋ช ํ๊ณ , ์๋ ๋ฐฉ์์ ๊ทธ๋ฆผ์ผ๋ก ๋ณด์ฌ์ฃผ๋ฉฐ, ์ด๋ฌํ ์๋ ๋ฐฉ์์ ์๋ฐ ์์ค ์ฝ๋๋ก ๊ตฌํํฉ๋๋ค. ํ์ต ๋ชฉํ ใDFS ใBFS ใ
scshim.tistory.com
https://velog.io/@suk13574/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98Java-BFS-DFS
๋ฐ์ํ
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ด์งํ์(Binary Search) ๊ฐ๋ ์ ๋ฆฌ (1) | 2024.06.11 |
---|---|
Queue ๊ฐ๋ ์ ๋ฆฌ (0) | 2024.06.11 |
Stack ๊ฐ๋ ์ ๋ฆฌ (0) | 2024.06.11 |
๋ฐฑ์ค 10988 ์๋ฐ ํฐ๋ฆฐ๋๋กฌ์ธ์ง ํ์ธํ๊ธฐ (0) | 2023.12.15 |
๋ฐฑ์ค 2609 java ์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์ (0) | 2023.12.11 |