DFS와 BFS
last update: 2021.09.08.WED
1260 DFS와 BFS, Silver 2
Memory 33644KB, Time 124ms
- 아래 에러 케이스와 비교하면 가장 큰 차이는,
- 성공 케이스는 visited를 리스트로 설정했고 실패 케이스는 딕셔너리로 두었다는 점이다.
- 딕셔너리가 접근이 더 빠를 것 같아서 사용했지만 결과적으로는 실패였다. 정석대로 리스트를 쓰는 편이 좋을 것 같다.
import sys
from collections import deque
def dfs(start):
visited = {}
stack = [start]
while stack:
n = stack.pop()
if n not in visited and graph.get(n) == None:
visited[n] = 1
print(n, end="")
elif n not in visited and graph.get(n) != None:
visited[n] = 1
print(n, end=" ")
temp = sorted(graph[n], reverse=True)
for num in temp:
if num not in visited:
stack.append(num)
return visited
def bfs(start):
visited = {}
q = deque([start])
while q:
v = q.popleft()
if v not in visited and graph.get(v) == None:
visited[v] = 1
print(v, end="")
elif v not in visited and graph.get(v) != None:
visited[v]=1
print(v, end=" ")
temp = sorted(graph[v])
for num in temp:
if num not in visited:
q.append(num)
return visited
n, m, start = map(int, sys.stdin.readline().split())
graph = {}
for i in range(m):
a, b = map(int, sys.stdin.readline().split())
if a == b:
pass
if a in graph:
graph[a].add(b)
else:
graph[a] = {b}
if b in graph:
graph[b].add(a)
else:
graph[b] = {a}
dfs(start)
print()
bfs(start)
- 런타임 에러를 많이 겪었다. 에러 코드 중 하나를 백업해둔다.
import sys
from collections import deque
def dfs(start):
visited = {}
stack = [start]
while stack:
n = stack.pop()
if n not in visited:
visited[n] = 1
print(n, end=" ")
if len(graph[n]) != 0:
temp = sorted(graph[n], reverse=True)
for num in temp:
if num not in visited:
stack.append(num)
return visited
def bfs(start):
visited = {}
q = deque([start])
while q:
v = q.popleft()
if v not in visited:
visited[v]=1
print(v, end=" ")
if len(graph[v]) != 0:
temp = sorted(graph[v])
for num in temp:
if num not in visited:
q.append(num)
return visited
n, m, start = map(int, sys.stdin.readline().split())
graph = {}
for _ in range(m):
a, b = map(int, sys.stdin.readline().split())
if a == b:
pass
if a in graph:
graph[a].add(b)
else:
graph[a] = {b}
if b in graph:
graph[b].add(a)
else:
graph[b] = {a}
dfs(start)
print()
bfs(start)