1. ๋ฌธ์ ์ค๋ช
- ์
๋ ฅ
- ์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N(1 โค N โค 1,000), ๊ฐ์ ์ ๊ฐ์ M(1 โค M โค 10,000), ํ์์ ์์ํ ์ ์ ์ ๋ฒํธ V๊ฐ ์ฃผ์ด์ง๋ค.
- ๋ค์ M๊ฐ์ ์ค์๋ ๊ฐ์ ์ด ์ฐ๊ฒฐํ๋ ๋ ์ ์ ์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ค ๋ ์ ์ ์ฌ์ด์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ด ์์ ์ ์๋ค.
- ์ถ๋ ฅ : ์ฒซ์งธ ์ค์ DFS๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ, ๊ทธ ๋ค์ ์ค์๋ BFS๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค. V๋ถํฐ ๋ฐฉ๋ฌธ๋ ์ ์ ์์๋๋ก ์ถ๋ ฅํ๋ฉด ๋๋ค.
2. ์ฝ๋
solution1.py
# -*- coding: utf-8 -*-
import sys
input = sys.stdin.readline
from collections import deque
N, M, V = map(int, input().split())
graph = [[] for _ in range(N+1)]
for i in range(M):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
for i in range(1, N+1):
graph[i].sort()
def dfs(graph, v, visited):
#ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
visited[v] = True
print(v, end=' ')
#ํ์ฌ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐฉ๋ฌธ
for i in graph[v]: #์ ์ ์ ์ธ์ ๋
ธ๋๋ค์ ํ์ธ
if not visited[i]: #์ธ์ ๋
ธ๋๋ค ์ค์ ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๊ฐ ์๋ค๋ฉด
dfs(graph, i, visited) #๋ฐฉ๋ฌธ์ฒ๋ฆฌ
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 #๋ฐฉ๋ฌธ์ฒ๋ฆฌ
visited = [False]*(N+1)
dfs(graph, V, visited)
visited = [False]*(N+1)
print()
bfs(graph, V, visited)
3. ํ๊ณ
- dfs, bfs ๊ธฐ์ด ๋ฌธ์ ๋ก ํ๊ธฐ ์ข์๋ค.
- graph์ ๋ณด๋ฅผ ์ ๋ ฅ ๋ฐ์ ๋ค sort()๋ฅผ ๊ผญ ํด์ฃผ์ด์ผํ๋ค.(์ ์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ ๋จผ์ ๋ฐฉ๋ฌธํ๋ค๋ ์กฐ๊ฑด์ด ์กด์ฌํ๋ค.)
- visited = [False]*(N+1)๋ฅผ ํตํด visited ์ด๊ธฐํํ ํ bfs๋ฅผ ์ํํด์ผํ๋ค.
- print()๋ฅผ ํตํด dfs ํ์ ์ค๋ฐ๊ฟ์ ํด์ค์ผํ๋ค. ์ด๊ฑธ ์ํด์ ์ถ๋ ฅ ํ์์ด ์๋ชป๋์๋ค๊ณ ๋ด์๋ค ใ ใ
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] #2805 ๋๋ฌด ์๋ฅด๊ธฐ (Python) (0) | 2022.01.26 |
---|---|
[๋ฐฑ์ค] #14502 ์ฐ๊ตฌ์ (Python) (0) | 2022.01.21 |
[๋ฐฑ์ค] #18405 ๊ฒฝ์์ ์ ์ผ (Python) (0) | 2022.01.18 |
[๋ฐฑ์ค] #18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (Python) (0) | 2022.01.18 |
[๋ฐฑ์ค] #15922 ์์ฐ์ผ ์ฐ์์ผ์ด์ผ!! (Python) (0) | 2021.05.18 |