간단한 문제인데 사실 그래프의 형태가 생소해서 잘 풀지 못했다는 점이 있다. 아무튼 처음에 알고리즘이 완벽하고 테스트 케이스도 완벽히 돌아갔는데 왜 틀렸는지 모르겠다. 일단 틀린 코드를 보면
def dfs(node):
visited[node] = True
answer1.append(node)
for line in graph:
if line[0] == node and not visited[line[1]]:
dfs(line[1])
elif line[1] == node and not visited[line[0]]:
dfs(line[0])
n, m, start = map(int, input().split())
graph = []
for _ in range(m):
graph.append(list(map(int, input().split())))
graph.sort()
visited = [False] * (n+1)
answer1 = []
dfs(start)
from collections import deque
visited = [False] * (n+1)
queue = deque()
queue.append(start)
visited[start] = True
answer2 = [start]
while queue:
now = queue.popleft()
for line in graph:
if line[0] == now and not visited[line[1]]:
queue.append(line[1])
visited[line[1]] = True
answer2.append(line[1])
elif line[1] == now and not visited[line[0]]:
queue.append(line[0])
visited[line[0]] = True
answer2.append(line[0])
print(*answer1)
print(*answer2)
이고 맞은 코드를 보면
from collections import deque
def dfs(node):
visited[node] = True
print(node, end=' ')
for i in range(1, n+1):
if graph[node][i] == 1 and not visited[i]:
dfs(i)
def bfs(node):
queue = deque([start])
visited[start] = True
while queue:
now = queue.popleft()
print(now, end=' ')
for i in range(1, n+1):
if graph[now][i] == 1 and not visited[i]:
queue.append(i)
visited[i] = True
n, m, start = map(int, input().split())
graph = [[0] * (n+1) for i in range(n+1)]
for _ in range(m):
a, b = map(int, input().split())
graph[a][b], graph[b][a] = 1, 1
visited = [False] * (n+1)
dfs(start)
visited = [False] * (n+1)
print()
bfs(start)
그래프는 항상 저런 형태로 만들어 놔야 편하다.