[1260๋ฒˆ] DFS์™€ BFS Python๐Ÿ

2022. 5. 18. 00:48ยท๐Ÿ”ฐ ๋ฐฑ์ค€/DFS ์™€ BFS
728x90

https://www.acmicpc.net/problem/1260

 

1260๋ฒˆ: DFS์™€ BFS

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 1,000), ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M(1 ≤ M ≤ 10,000), ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์ •์ ์˜ ๋ฒˆํ˜ธ V๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ„์„ ์ด ์—ฐ๊ฒฐํ•˜๋Š” ๋‘ ์ •์ ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์–ด๋–ค ๋‘ ์ •์  ์‚ฌ

www.acmicpc.net

์•Œ๊ณ ๋ฆฌ์ฆ˜ [์ ‘๊ทผ ๋ฐฉ๋ฒ•]

dfs๋Š” ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰, ์ฆ‰ ๋ง ๊ทธ๋Œ€๋กœ ๊นŠ์ด๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๊ณ ,
bfs๋Š” ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰, ์ฆ‰ ๋„ˆ๋น„๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๋ฌธ์ œ ์ž์ฒด๋Š” bfs์˜๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์•„ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์ง€๋งŒ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ dfs์™€ bfs๋ฅผ ๊ฐ์ž ์‹คํ–‰ํ•ด์•ผํ•˜๋ฏ€๋กœ visited ๋ฅผ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ๊ฑฐ๋‚˜, ๋‘๊ฐœ ๋งŒ๋“ค๊ฑฐ๋‚˜, dfs๋Š” visited๋ฅผ True bfs ๋Š” False๋กœ ํ•ด์ฃผ๋Š” ๋“ฑ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

 

DFS์™€ BFS๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํŠธ๋ฆฌ๋‚˜ ๊ทธ๋ž˜ํ”„์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ ํŒŒ์•…์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น ๋ฌธ์ œ์—์„œ Class Node๋ฅผ ํ•˜๋ฉด์„œ Node๋ฅผ ๋งŒ๋“ค๊ณ  ์—ฐ๊ฒฐํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์—๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ธ์ ‘ํ–‰๋ ฌ ๋ฐฉ์‹์œผ๋กœ ํ–‰๊ณผ ์—ด์„ ํ†ตํ•ด์„œ ๊ฐ’์„ ํ•ด๋‹น ์ˆซ์ž๋“ค์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.

N๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ N+1 x N+1์˜ ํ–‰๋ ฌ์„ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด์„œ ๋งŒ๋“ค๊ณ  0์œผ๋กœ ์ฑ„์›Œ์ค€๋‹ค. ์ธ๋ฑ์Šค์™€ ๊ฐ’์„ ์ผ์น˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ N+1๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์—ฐ๊ฒฐ๋œ ์ˆซ์ž๋“ค ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›์•„์„œ ํ•ด๋‹น ํ–‰๊ณผ ์—ด์˜ ๊ฐ’์„ 1๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ ํ–‰์˜ ์ˆซ์ž์™€ ์—ด์˜ ์ˆซ์ž๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ํ‘œ์‹œ๋ฅผ ํ•ด์ค€๋‹ค.


ํ’€์ด

  1.  ๋จผ์ € ์ž…๋ ฅ ๋ณ€์ˆ˜๋กœ n,m,v๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค
  2.  ์ธ์ ‘ ์˜ํ–‰๋ ฌ์„ ์ƒ์„ฑ์‹œ์ผœ์ค€๋‹ค. (=graph)
  3.  ๋ฐฉ๋ฌธํ•  ๊ณณ์„ ์ฒดํฌํ•  visited ๋ฆฌ์ŠคํŠธ๋ฅผ DFS, BFS๋กœ ๋‚˜๋ˆ„์–ด 2๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  4.  ์ž…๋ ฅ ๋ฐ›๋Š” ๋‘ ๊ฐ’์— ๋Œ€ํ•ด ์˜ํ–‰๋ ฌ์— 1์„ ์‚ฝ์ž…ํ•œ๋‹ค.
  5.  DFS๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, ์ •์  V์— ๋Œ€ํ•œ visited ๊ฐ’์— 1์„ ๋„ฃ์–ด ๋ฐฉ๋ฌธ์„ ํ‘œ์‹œํ•˜๊ณ  ๊ทธํ›„, ์ถœ๋ ฅํ•œ๋‹ค. 
  6.  DFS) for ๋ฌธ์˜ ๋ฒ”์œ„๊ฐ€ 1๋ถ€ํ„ฐ n+1๊นŒ์ง€ ๋Œ๋ฉด์„œ visited ๋ฏธ๋ฐฉ๋ฌธ & graph์— ๋Œ€ํ•œ v,i๊ฐ€ 1์ผ๋•Œ๋งŒ dfs๋ฅผ ์žฌ๊ท€์‹คํ–‰
  7.  BFS๋ฅผ  ๊ตฌํ˜„ํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ visited ๊ฐ’์— 1์„ ๋„ฃ์–ด ๋ฐฉ๋ฌธ์„ ํ‘œ์‹œํ•˜๊ณ  queue์— ๊ฐ’์„ ๋„ฃ์œผ๋ฉด์„œ ์ถœ๋ ฅํ•œ๋‹ค.
  8.  BFS) for์„ ๋Œ๋ฉด์„œ ๋˜‘๊ฐ™์ด visited ๋ฏธ๋ฐฉ๋ฌธ & graph์— ๋Œ€ํ•œ v,i๊ฐ€ 1์ผ ๋•Œ queue์— ์‚ฝ์ž…์„ ์ง„ํ–‰ํ•˜๊ณ  ๋ฐฉ๋ฌธ์„ ํ‘œ์‹œํ•œ๋‹ค.

 

์ฝ”๋“œ

import sys
from collections import deque
def dfs(v):
    visited_dfs[v] = 1
    print(v, end = " ")
    for i in range(1, n+1):
        if visited_dfs[i] == 0 and graph[v][i] == 1:
            dfs(i)

def bfs(v):
    q = deque()
    q.append(v)
    visited_bfs[v] = 1
    while q:
        v = q.popleft()
        print(v, end=" ")
        for i in range(1, n+1):
            if visited_bfs[i] == 0 and graph[v][i] == 1:
                q.append(i)
                visited_bfs[i] = 1


read = sys.stdin.readline
n, m, v = map(int, read().split())

graph = [[0] * (n+1) for i in range(n+1)]
visited_bfs =  [0] * (n+1)
visited_dfs = [0] * (n+1)

for _ in range(m):
    a, b = map(int, read().split())
    graph[a][b] = graph[b][a] = 1


dfs(v)
print()
bfs(v)
728x90
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ”ฐ ๋ฐฑ์ค€/DFS ์™€ BFS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [24444๋ฒˆ] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ 1 Pyton๐Ÿ
  • [2606๋ฒˆ] ๋ฐ”์ด๋Ÿฌ์Šค Python๐Ÿ
juno1105
juno1105
๊ณต๋ถ€ํ•˜๋Š” ๊ฒธ ํฌํด ๋ธ”๋กœ๊ทธ
  • juno1105
    @juno1105
    juno1105
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (89)
      • ๐Ÿ’ฌ ์ž์œ  (3)
      • ๐Ÿ“– ์–ดํ•™ ๊ณต๋ถ€ (0)
      • ๐Ÿ“” ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ (4)
      • ๐Ÿ›  ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ๋ฒ• (1)
      • ๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (53)
        • ์Šคํƒ (4)
        • ํ (4)
        • ์ •๋ ฌ ๋ฐ ํƒ์ƒ‰ (17)
        • ๋ฆฌ์ŠคํŠธ (5)
        • ํ•ด์‹œ (1)
        • ํŠธ๋ฆฌ (8)
        • ํž™ (2)
        • ๊ทธ๋ž˜ํ”„ (12)
      • ๐Ÿ’ป ์ปดํ“จํ„ฐ ๊ตฌ์กฐ (0)
      • ๐Ÿšฅ ๋…ผ๋ฆฌํšŒ๋กœ (8)
      • ๐Ÿ”ฐ ๋ฐฑ์ค€ (20)
        • ํ, ์Šคํƒ, ๋ฑ (0)
        • DFS ์™€ BFS (3)
        • ๊ทธ๋ฆฌ๋”” (0)
        • ๋™์ ๊ณ„ํš๋ฒ• 1 (16)
        • ๋™์ ๊ณ„ํš๋ฒ• 2 (0)
        • ์ตœ๋‹จ ๊ฒฝ๋กœ (0)
        • ํŠธ๋ฆฌ (0)
        • ๋ฐฑํŠธ๋ž˜ํ‚น (0)
        • ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ (0)
        • ์ง‘ํ•ฉ๊ณผ ๋งต (1)
      • ๐ŸŒˆ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (0)
      • ๐Ÿ“ฑ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

    • โœจ์ž๋ฃŒ๊ตฌ์กฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ปค๋ฆฌํ˜๋Ÿผโœจ
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋น…์˜คํ‘œ๊ธฐ๋ฒ•
    ์ •๋ ฌ ์ตœ์•…์˜ ๊ฒฝ์šฐ
    ํ† ์ต 910์ 
    ์‹œ๊ฐ„๋ณต์žก๋„
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๊ทธ๋ž˜ํ”„ํƒ์ƒ‰
    ํ† ์ต 900์ 
    ํ† ์ต 920์ 
    ์ •๋ ฌ ์ตœ์„ ์˜ ๊ฒฝ์šฐ
    ์ตœ๋‹จ๊ฒฝ๋กœ
    ํ† ์ต 900์ ๋Œ€
    ํ† ์ต 950์ 
    ํ† ์ต 900
    ํ† ์ต
    ์ •๋ ฌ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
juno1105
[1260๋ฒˆ] DFS์™€ BFS Python๐Ÿ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”