😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[이것이 μ½”λ”© ν…ŒμŠ€νŠΈλ‹€ with Python]_19_BFS λ³Έλ¬Έ

πŸ¦₯ μ½”ν…Œ/이것이 μ½”λ”© ν…ŒμŠ€νŠΈλ‹€ with python

[이것이 μ½”λ”© ν…ŒμŠ€νŠΈλ‹€ with Python]_19_BFS

μ§•μ§•μ•ŒνŒŒμΉ΄ 2022. 2. 2. 01:13
728x90
λ°˜μ‘ν˜•

220202 μž‘μ„±

<λ³Έ λΈ”λ‘œκ·ΈλŠ” γ€Žμ΄κ²ƒμ΄ 취업을 μœ„ν•œ μ½”λ”© ν…ŒμŠ€νŠΈλ‹€γ€ μ˜ youtubeλ₯Ό μ°Έκ³ ν•΄μ„œ κ³΅λΆ€ν•˜λ©° μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€>

https://www.youtube.com/watch?v=CJiF-muKz30&list=PLVsNizTWUw7H9_of5YCB0FmsSc-K44y81&index=19 

 

 

 

 

 

 

 

1. BFS (Breadth - Frist Search)

: λ„ˆλΉ„ μš°μ„  탐색

: κ°€κΉŒμš΄ λ…Έλ“œλΆ€ν„° μš°μ„ μ μœΌλ‘œ 탐색함

: 큐 자료ꡬ쑰 이용

 

1) 탐색 μ‹œμž‘ λ…Έλ“œλ₯Ό 큐에 μ‚½μž…ν•˜κ³  λ°©λ¬Έ 처리

2) νμ—μ„œ λ…Έλ“œλ₯Ό κΊΌλ‚Έ λ’€, ν•΄λ‹Ή λ…Έλ“œμ˜ 인접 λ…Έλ“œ 쀑 λ°©λ¬Έν•˜μ§€ μ•Šμ€ λ…Έλ“œλ₯Ό λͺ¨λ‘ 큐에 μ‚½μž… ν•˜κ³  λ°©λ¬Έ 처리!

3) 2번 과정을 μˆ˜ν–‰ν•  수 없을 λ•ŒκΉŒμ§€ 반볡

 

 

 

+) λ™μž‘ μ˜ˆμ‹œ

- μ‹œμž‘ λ…Έλ“œ 1

: 큐에 μ‚½μž…ν•˜κ³  λ°©λ¬Έ 처리 !

- νμ—μ„œ λ…Έλ“œ 1을 κΊΌλ‚΄, λ°©λ¬Έ ν•˜μ§€ μ•Šμ€ 2, 3, 8을 큐에 μ‚½μž…ν•˜κ³  λ°©λ¬Έ 처리 ! ( μž‘μ€ 수 λΆ€ν„° )

- νμ—μ„œ λ…Έλ“œ 2λ₯Ό κΊΌλ‚΄, λ°©λ¬Έ ν•˜μ§€ μ•Šμ€ 7λ₯Ό 큐에 μ‚½μž…ν•˜κ³  λ°©λ¬Έ 처리 !

- νμ—μ„œ λ…Έλ“œ 3을 κΊΌλ‚΄, λ°©λ¬Έ ν•˜μ§€ μ•Šμ€ 4, 5λ₯Ό 큐에 μ‚½μž…ν•˜κ³  λ°©λ¬Έ 처리 !

- νμ—μ„œ λ…Έλ“œ 8을 κΊΌλ‚΄, λ°©λ¬Έ ν•˜μ§€ μ•Šμ€κ²Œ μ—†λ„€!! λ¬΄μ‹œ !

=> 1, 2, 3, 8, 7, 4, 5, 6 ( 전체 λ…Έλ“œ 탐색 μˆœμ„œ, 큐에 λ“€μ–΄κ°„ μˆœμ„œ )

 

 

  • python
from collections import deque

def bfs(graph, start, visited) :
    queue = deque([start])

    # ν˜„μž¬ λ…Έλ“œλ₯Ό λ°©λ¬Έ 처리
    visited[start] = True
    
    # 큐가 빌 λ•ŒκΉŒμ§€ 반볡
    while queue :
      v = queue.popleft()
      print(v, end = " ")

      # 아직 λ°©λ¬Έν•˜μ§€ μ•Šμ€ 인접 μ›μ†Œλ₯Ό 큐에 μ‚½μž…
      for i in graph[v] :
          if not visited[i] :
              queue.append(i)
              visited[i] = True

# 각 λ…Έλ“œκ°€ μ—°κ²°λœ 정보 ν‘œν˜„ ( 2차원 리슀트 )
graph = [
  [],
  [2, 3, 5],
  [1, 7],
  [1, 4, 5],
  [3, 4],
  [3, 5],
  [2, 5, 4],
  [7],
  [1, 7]
]

# 각 λ…Έλ“œκ°€ 방문된 정보 ν‘œν˜„ ( 1차원 리슀트 )
visited = [False] * 9

dfs(graph, 1, visited)


# result
# 1 2 7 3 4 5
  • c++
#include <bits/stdc++.h>

using namespace std;

bool visited[9];
vector<int> graph[9];

// BFS ν•¨μˆ˜ μ •μ˜
void bfs(int start) {
    queue<int> q;
    q.push(start);
    // ν˜„μž¬ λ…Έλ“œλ₯Ό λ°©λ¬Έ 처리
    visited[start] = true;
    // 큐가 빌 λ•ŒκΉŒμ§€ 반볡
    while(!q.empty()) {
    	// νμ—μ„œ ν•˜λ‚˜μ˜ μ›μ†Œλ₯Ό 뽑아 좜λ ₯
        int x = q.front();
        q.pop();
        cout << x << ' ';
        // ν•΄λ‹Ή μ›μ†Œμ™€ μ—°κ²°λœ, 아직 λ°©λ¬Έν•˜μ§€ μ•Šμ€ μ›μ†Œλ“€μ„ 큐에 μ‚½μž…
        for(int i = 0; i < graph[x].size(); i++) {
            int y = graph[x][i];
            if(!visited[y]) {
                q.push(y);
                visited[y] = true;
            }
        }
    }
}

int main(void) {
    // λ…Έλ“œ 1에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
    graph[1].push_back(2);
    graph[1].push_back(3);
    graph[1].push_back(8);
    
    // λ…Έλ“œ 2에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
    graph[2].push_back(1);
    graph[2].push_back(7);
    
    // λ…Έλ“œ 3에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
    graph[3].push_back(1);
    graph[3].push_back(4);
    graph[3].push_back(5);
    
    // λ…Έλ“œ 4에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
    graph[4].push_back(3);
    graph[4].push_back(5);
    
    // λ…Έλ“œ 5에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
    graph[5].push_back(3);
    graph[5].push_back(4);
    
    // λ…Έλ“œ 6에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
    graph[6].push_back(7);
    
    // λ…Έλ“œ 7에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
    graph[7].push_back(2);
    graph[7].push_back(6);
    graph[7].push_back(8);
    
    // λ…Έλ“œ 8에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
    graph[8].push_back(1);
    graph[8].push_back(7);
    
    bfs(1);
}
  • java
import java.util.*;

public class Main {

    public static boolean[] visited = new boolean[9];
    public static ArrayList<ArrayList<Integer>> graph = new ArrayList<ArrayList<Integer>>();

    // BFS ν•¨μˆ˜ μ •μ˜
    public static void bfs(int start) {
        Queue<Integer> q = new LinkedList<>();
        q.offer(start);
        // ν˜„μž¬ λ…Έλ“œλ₯Ό λ°©λ¬Έ 처리
        visited[start] = true;
        // 큐가 빌 λ•ŒκΉŒμ§€ 반볡
        while(!q.isEmpty()) {
            // νμ—μ„œ ν•˜λ‚˜μ˜ μ›μ†Œλ₯Ό 뽑아 좜λ ₯
            int x = q.poll();
            System.out.print(x + " ");
            // ν•΄λ‹Ή μ›μ†Œμ™€ μ—°κ²°λœ, 아직 λ°©λ¬Έν•˜μ§€ μ•Šμ€ μ›μ†Œλ“€μ„ 큐에 μ‚½μž…
            for(int i = 0; i < graph.get(x).size(); i++) {
                int y = graph.get(x).get(i);
                if(!visited[y]) {
                    q.offer(y);
                    visited[y] = true;
                }
            }
        }
    }

    public static void main(String[] args) {
        // κ·Έλž˜ν”„ μ΄ˆκΈ°ν™”
        for (int i = 0; i < 9; i++) {
            graph.add(new ArrayList<Integer>());
        }

        // λ…Έλ“œ 1에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
        graph.get(1).add(2);
        graph.get(1).add(3);
        graph.get(1).add(8);
        
        // λ…Έλ“œ 2에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
        graph.get(2).add(1);
        graph.get(2).add(7);
        
        // λ…Έλ“œ 3에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
        graph.get(3).add(1);
        graph.get(3).add(4);
        graph.get(3).add(5);
        
        // λ…Έλ“œ 4에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
        graph.get(4).add(3);
        graph.get(4).add(5);
        
        // λ…Έλ“œ 5에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
        graph.get(5).add(3);
        graph.get(5).add(4);
        
        // λ…Έλ“œ 6에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
        graph.get(6).add(7);
        
        // λ…Έλ“œ 7에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
        graph.get(7).add(2);
        graph.get(7).add(6);
        graph.get(7).add(8);
        
        // λ…Έλ“œ 8에 μ—°κ²°λœ λ…Έλ“œ 정보 μ €μž₯ 
        graph.get(8).add(1);
        graph.get(8).add(7);

        bfs(1);
    }

}

 

 

 

 

 

 

 

 

728x90
λ°˜μ‘ν˜•
Comments