[Algorithm] π DFS(κΉμ΄ μ°μ νμ)μ BFS(λμ΄ μ°μ νμ)
π κ·Έλνλ₯Ό νμνλ λ°©λ²
κ·Έλνλ λ
Έλμ κ°μ μΌλ‘ μ΄λ£¨μ΄μ§ μλ£κ΅¬μ‘°μ μΌμ’
μ΄λ€.
μ΄ κ·Έλνλ₯Ό νμνλ λ°©λ²μλ DFS(Depth-First Search) μ¦, κΉμ΄ μ°μ νμ λ°©λ²κ³Ό BFS(Breadth-First Search) μ¦, λμ΄ μ°μ νμ λ°©λ²μ΄ μλ€.
μ΄λ, ꡬνλ°©λ²μ μΈμ νλ ¬κ³Ό μΈμ 리μ€νΈλ₯Ό μ¬μ©νμ¬ κ΅¬ννλλ°, μ΄μ λν΄ λ μμλ³΄κ³ μΆμΌλ©΄ λ€μ λ§ν¬λ₯Ό μ΄ν΄λ³΄κΈΈ λ°λλ€.
λ§ν¬
π DFS(κΉμ΄ μ°μ νμ)
λ€μμ DFS
μ μ μμ΄λ€.
κ·Έλνμμ κΉμ λΆλΆμ μ°μ μ μΌλ‘ νμνλ μκ³ λ¦¬μ¦
DFS
λ λ€μ κ·Έλ¦Όκ³Ό κ°μ΄ μλμ νλ©° μΌλ°μ μΌλ‘ Stack
μ΄λ μ¬κ·ν¨μλ₯Ό ν΅ν΄ ꡬννλ€.
μΆμ²:https://developer-mac.tistory.com/64
- νμ μμ λ
Έλλ₯Ό
Stack
μ μ½μ νκ³ λ°©λ¬Έ μ²λ¦¬νλ€. Stack
μ topμ μλ λ Έλμ μΈμ ν λ Έλκ° νλλΌλ μμΌλ©΄, κ·Έ λ Έλλ₯Ό λ°©λ¬Έ μ²λ¦¬νκ³ ,Stack
μ λ£λλ€.- λ°©λ¬Ένμ§ μμ λ
Έλκ° μμΌλ©΄
Top
μμ λ Έλλ₯Ό κΊΌλΈλ€. - 2μ 3μ μνν μ μμ λκΉμ§ λ°λ³΅νλ€.
π ꡬν
π μ¬κ· νΈμΆ
static Stack<Integer> stack = new Stack<>();
static StringBuilder sb = new StringBuilder();
static boolean node[][] = new boolean[n+1][n+1], visited[] = new boolean[n+1];
static void dfs(int v) {
if(visited[v])
return;
sb.append(v+" ");
for(int i=1; i<=n; i++)
if(node[v][i] && !visited[i]) {
visited[i] = true;
dfs(i);
}
}
π μ€ν μ¬μ©
public static String dfs(int v, boolean node[][]) {
StringBuilder sb = new StringBuilder();
Stack<Integer> stack = new Stack<>();
boolean visited[] = new boolean[n+1];
stack.add(v);
int idx;
while(!stack.isEmpty()) {
idx = stack.pop();
if(visited[idx])
continue;
visited[idx] = true;
sb.append(idx+" ");
for(int i=0; i<n; i++)
if(node[idx][i] && !visited[i])
stack.add(i);
}
return sb.toString();
}
π BFS(λμ΄ μ°μ νμ)
λ€μμ BFS
μ μ μμ΄λ€.
κ·Έλνμμ κ°κΉμ΄ λ ΈλλΆν° μ°μ μ μΌλ‘ νμνλ μκ³ λ¦¬μ¦
BFS
λ λ€μ κ·Έλ¦Όκ³Ό κ°μ΄ μλμ νλ©°, μΌλ°μ μΌλ‘ Queue
λ₯Ό μ¬μ©νμ¬ κ΅¬ννλ€.
μΆμ²:https://developer-mac.tistory.com/64
- νμ μμ λ
Έλλ₯Ό
Queue
μ μ½μ νκ³ λ°©λ¬Έ μ²λ¦¬νλ€. Queue
μμ λ Έλλ₯Ό κΊΌλΈν μΈμ λ Έλμ€ λ°©λ¬Ένμ§ μμ λ Έλλ₯Ό λͺ¨λQueue
μ μ½μ νκ³ λ°©λ¬Έ μ²λ¦¬νλ€.- 2μ μνν μ μμ λκΉμ§ λ°λ³΅νλ€.
π μΈμ νλ ¬
void BFS(int V, int start)
{
queue<int> q;
bool check[V+1] = {false};
check[start] = true;
q.push(start);
while(!q.empty())
{
int now = q.front();
q.pop();
for(int i = 1; i <= V; i++)
{
if(graph[now][i] == 1 && !check[i])
{
check[i] = true;
q.push(i);
}
}
}
}
π μΈμ 리μ€νΈ
void BFS(vector<int> *graph,int V, int start)
{
queue<int> q;
bool check[V+1] = {false};
check[start] = true;
q.push(start);
while(!q.empty())
{
int now = q.front();
q.pop();
for(int i = 0; i < graph[now].size(); i++)
{
int next = graph[now][i];
if(!check[next])
{
check[next] = true;
q.push(next);
}
}
}
}
π κ΄λ ¨ μμ
tag:DFS tag:BFS
κ°μΈ κ³΅λΆ κΈ°λ‘μ© λΈλ‘κ·Έμ
λλ€.
ν리거λ μ€λ₯κ° μμ κ²½μ° μ 보ν΄μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€.π