[왜 틀렸지] 백준 1260번

장준서·2022년 4월 9일
0

알고리즘 문제

목록 보기
22/29

간단한 문제인데 사실 그래프의 형태가 생소해서 잘 풀지 못했다는 점이 있다. 아무튼 처음에 알고리즘이 완벽하고 테스트 케이스도 완벽히 돌아갔는데 왜 틀렸는지 모르겠다. 일단 틀린 코드를 보면

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)

그래프는 항상 저런 형태로 만들어 놔야 편하다.

profile
let's get ready to rumble

0개의 댓글