[BaekJoon] λ°±μ€€ 1260번 : DFS와 BFS

Updated:

1260번 : DFS와 BFS

DFSBFS


μ–΄μ œ [BaekJoon] 1620번 : λ‚˜λŠ”μ•Ό 포켓λͺ¬ λ§ˆμŠ€ν„° μ΄λ‹€μ†œ 이 문제λ₯Ό ν’€κΈ° μ „ DFS, BFS ν™œμš© ν•˜λŠ” 문제λ₯Ό ν’€μ—ˆλŠ”λ°

μ‹œκ°„μ΄ λ„ˆλ¬΄ 였래걸렀 풀지 λͺ»ν–ˆλ‹€. μ˜ˆμ „μ— BFS, DFS κ°œλ…μ„ μ •λ¦¬ν•œ 적이 μžˆμ—ˆλŠ”λ° μ•ˆν’€λ €μ„œ 더 화났닀..

κ·Έλž˜μ„œ 였늘 μ •ν™•νžˆ ν•˜κΈ° μœ„ν•΄ BFS, DFS 문제λ₯Ό ν’€μ—ˆλ‹€. C 둜 κ΅¬ν˜„ν•  λ•Œ 보닀 λ„ˆλ¬΄λ„ˆλ¬΄ κ°„λ‹¨ν•΄μ„œ 정말 μ’‹μ•˜λ‹€..

κ·Έλž˜ν”„λŠ” μ‚¬μ „μœΌλ‘œ λ§Œλ“€κ³  BFS λŠ” 큐λ₯Ό, DFS λŠ” μŠ€νƒμ„ μ‚¬μš©ν•˜λ©΄ κ΅¬ν˜„ ν•  수 μžˆλ‹€.

λ¬Έμ œμ—μ„œ 정점이 μ—¬λŸ¬ 개 인 경우 정점 λ²ˆν˜Έκ°€ μž‘μ€ 것을 λ¨Όμ € λ°©λ¬Έν•˜κΈ° λ•Œλ¬Έμ— κ°„μ„  정보λ₯Ό λͺ¨λ‘ μž…λ ₯ 받은 ν›„

λ§ˆμ§€λ§‰μ— 정렬을 ν•œ 번 μ”© ν•΄μ£Όλ©΄ 정점 λ²ˆν˜Έκ°€ μž‘μ€ μˆœμ„œλŒ€λ‘œ λ°©λ¬Έ ν•  수 μžˆλ‹€.

λ°©λ¬Έ ν–ˆλ˜ 정점을 κ΄€λ¦¬ν•˜λŠ” 것도 μ‚¬μ „μœΌλ‘œ λ§Œλ“€μ—ˆλŠ”λ° in λͺ…령을 μˆ˜ν–‰ν• λ•Œ μ‘°κΈˆμ΄λΌλ„ μ‹œκ°„μ„ 쀄이기 μœ„ν•¨μ΄λ‹€.


import sys
from collections import deque


def DFS(graph, start):
	visit = dict()
	stack = [start]

	while stack:
		visit_ver = stack.pop()
		if visit_ver not in visit:
			print(visit_ver, end=' ')
			visit[visit_ver] = 1

		for ver in reversed(graph[visit_ver]):

			if ver not in visit:
				stack.append(ver)


def BFS(graph, start):
	visit = dict()
	queue = deque([start])

	while queue:
		visit_ver = queue.popleft()
		if visit_ver not in visit:
			print(visit_ver, end=' ')
			visit[visit_ver] = 1

		for ver in graph[visit_ver]:
			if ver not in visit:
				queue.append(ver)


N, M, V = map(int, sys.stdin.readline().rsplit())
graph = {i: [] for i in range(1, N + 1)}

for _ in range(M):
	start, end = map(int, sys.stdin.readline().rsplit())
	graph[start].append(end)
	graph[end].append(start)

for i in range(1, N + 1):  # 정점 λ²ˆν˜Έκ°€ μž‘μ€ 순으둜 λ°©λ¬Έν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— μ •λ ¬ν•œλ‹€
	graph[i].sort()

DFS(graph, V)
print()
BFS(graph, V)

Categories:

Updated:

Leave a comment