๐ง๐ป [Python] ๋ฐฑ์ค 1260 DFS์ BFS
Silver 2 - DFS / BFS
DFS๋ ๊น์ด ์ฐ์ ์ด๋ค. ๋จผ์ ํ ์ชฝ์ ์ ํํด์, ํ์์ ํ๋ ๊ฒ์ด๋ค
BFS๋ ๋์ด ์ฐ์ ํ์์ด๋ค. ์ฆ ๋ถ๋ชจ ๋ ธ๋์ ์ฌ๋ฌ ์์ ๋ ธ๋๊ฐ ์์ผ๋ฉด, ๋ฐ๋ก ์ฐ๊ฒฐ๋์ด ์๋ ์์ ๋ ธ๋๋ค ๋ถํฐ ํ์์ ํ๋ค
๋ฌธ์ ํ์ด
- ํจ์๋ฅผ ์ฌ์ฉํ๋ค
- ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ , ๋ฆฌ์คํธ ์์ ์๋ ์์๋ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค (๋ง์ฝ ๊ธธ์ด 2๊ฐ ์ด์์ด๋ฉด, ์ซ์๊ฐ ์์ ๊ณณ๋ถํฐ ํ์์ ํ๋ค)
- DFS ๊ฐ์ ๊ฒฝ์ฐ, ์ฌ๊ท๋ฅผ ์ด์ฉํ๋ค
- ์ฆ DFS๋ ๋ง์ฝ ๋ฐฉ๋ฌธ์ ์ ํ ๋
ธ๋๊ฐ ์์ผ๋ฉด, ๊ทธ ๋
ธ๋๋ฅผ ๋ค์
DFS(V)
๋ฅผ ํ๋ค - ๋ฐฉ๋ฌธ์ ํ์ผ๋ฉด for๋ฌธ์ ๋๊น์ง ๋์๊ฐ ๊ฒ์ด๋ค.
- ์ฆ for๋ฌธ์ด ๋๋ฌ๋ค๋ ๊ฒ์, ์ด๋ฏธ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ๋ฒ์ฉ ํ์์ ํ๋ค๋ ๊ฒ์ด๋ค
- ์ฆ DFS๋ ๋ง์ฝ ๋ฐฉ๋ฌธ์ ์ ํ ๋
ธ๋๊ฐ ์์ผ๋ฉด, ๊ทธ ๋
ธ๋๋ฅผ ๋ค์
- BFS ๊ฐ์ ๊ฒฝ์ฐ queue๋ฅผ ์ด์ฉํ๋ค (DFS๋ pop์ ํ ์๊ฐ ์๋ค. BFS, DFS ๋ชจ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค)
queue
๋ฅผ ์ด์ฉํ์ฌ, ์ฃผ๋ณ ๋ ธ๋๋ค์ ํ์ํ๋ ๊ฒ์ด๋ค
์ฝ๋
from collections import deque
DFS_LIST = []
BFS_LIST = []
def dfs(V):
dfs_visited[V] = 'V'
DFS_LIST.append(V + 1)
for i in graph[V]:
if dfs_visited[i] != 'V':
dfs(i)
return DFS_LIST
def bfs(V):
bfs_visited[V] = 'V'
queue = deque([V])
while queue:
current = queue.popleft()
BFS_LIST.append(current + 1)
for cur in graph[current]:
if bfs_visited[cur] != 'V':
bfs_visited[cur] = 'V'
queue.append(cur)
return BFS_LIST
# N ์ ์ ์ ๊ฐ์ / M ๊ฐ์ ์ ๊ฐ์ / V ํ์ ์์
N, M, V = map(int, input().split())
V = V - 1
graph = [[] for _ in range(N)]
dfs_visited = [0] * (N)
bfs_visited = [0] * (N)
for _ in range(M):
a, b = map(int, input().split())
graph[a - 1].append(b - 1)
graph[b - 1].append(a - 1)
for j in graph:
j.sort()
print(graph)
print(' '.join(map(str, dfs(V))))
print(' '.join(map(str, bfs(V))))
'์๊ณ ๋ฆฌ์ฆ > DFS BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 7569 ํ ๋งํ (0) | 2023.02.13 |
---|---|
[Python] ๋ฐฑ์ค 7576 ํ ๋งํ (0) | 2023.02.13 |
[Python] ๋ฐฑ์ค 24481 ์๊ณ ๋ฆฌ์ฆ ์์ DFS (์ฌ๊ท!!!) (0) | 2023.02.11 |
[Python] ๋ฐฑ์ค 2644 ์ด์๊ณ์ฐ (0) | 2023.02.09 |
[Python] ๋ฐฑ์ค 1388 ๋ฐ๋ฅ ์ฅ์ (4) | 2023.02.08 |