Algorithm

BAEKJOON 1260 : DFS와 BFS

cycoding 2021. 2. 19. 15:45

기본적인 dfs와 bfs 문제다.

기본이라서 무난하게 풀었지만, 그래도 삽질을 조금 했다.^^(삽질의 내용은 나중에 나온다ㅜ)

 

나는 이 문제를 풀기 위해 먼저 이어져 있는 노드를 다음과 같이 표로 표현해 봤다.

 

예를 들어,

 

4 5 1

1 2

1 3

1 4

2 4

3 4

 

이렇게 입력이 된다면 표로는 이렇게 나타낼 수 있는 것이다. 이렇게 시각화를 하면 훨씬 문제를 풀기가 수월해지는 것 같다.

  1 2 3 4
1 0 1 1 1
2 1 0 0 1
3 1 0 0 1
4 1 1 1 0

 

이렇게 해서 풀어낸 코드가 이것이다. python으로 코딩했다.

 

from collections import deque

n, m, v = map(int, input().split())
arr = [[0]*(n+1) for j in range(n+1)]

for i in range(m):
    x, y = map(int, input().split())
    arr[x][y] = 1
    arr[y][x] = 1

#dfs
visited = [0]*(n+1)

def dfs(input):
    print(input, end = ' ')
    visited[input] = 1

    for i in range(1, n+1):
        if(arr[input][i] == 1 and visited[i] == 0):
            dfs(i)

dfs(v)

print()

#bfs
visited = [0]*(n+1)

def bfs(input):
    queue = deque()
    queue.append(input)
    visited[input] = 1

    while queue:
        x = queue.popleft()
        print(x, end = ' ')

        for i in range(1, n+1):
            if arr[x][i] == 1 and visited[i] == 0:
                visited[i] = 1
                queue.append(i)

bfs(v)

 

삽질은 bfs(v)라고 하면 될것을 위에서 dfs(v)라고 잘 하다가 갑자기 print(bfs(v))라고 한 것이다. 이런짓을 하니 bfs 탐색 끝에 None이 같이 출력되었다 ㅎㅎ....

정말 queue가 비었는데도 돌아가는 줄 알고 뻘짓했다! 그래도 금방 찾아내서 다행이다,,,ㅜ