IT

파이썬 1260번

프로개발러 2023. 8. 1. 10:53
반응형
from collections import deque

N, M, V = map(int, input().split())

graph = [[False] * (N + 1) for _ in range(N + 1)]  # 2차원 배열 선언 / [N+1][N+1] 선언
#graph = [[False]*(N+1)] * (N+1)
# +1을 해주는 이유는 0번 일 때 1번을 바라보도록

for _ in range(M):
    a, b = map(int, input().split())  # 입력
    graph[a][b] = True
    graph[b][a] = True

# 2차원 배열 [3][3]일 경우
# 입력값 2 2 1
#      1 2
#      2 1
# [[False, False, False], [False, False, True], [False, True, False]]

# 1번 정점이 2번 정점과 연결 ->
#                         1번 정점에서    2번과 연결 했기 때문에 True 표시     [1][2]에서 True표시
# [[False, False, False], [False, False, True], [False, True, False]]

# 2번 정점이 1번 정점과 연결 ->
#                                               2번 정점에서  1번과 연결 했기 때문에 True 표시 [2][1]
# [[False, False, False], [False, False, True], [False, True, False]]


visited1 = [False] * (N + 1)  # dfs의 방문기록
visited2 = [False] * (N + 1)  # bfs의 방문기록

# 깊이우선탐색
#           1
#       2        3
#   4     5    6   7
# 1 - 2 -4 - 5 - 3 -6 -7
# 7 ?  1



def dfs(V):
    visited1[V] = True  # 처음방문하면 True표시
    print(V, end=" ")
    for i in range(1, N + 1):
        if not visited1[i] and graph[V][i]:  # 만약 i값을 방문하지 않았고 V와 연결이 되어 있다면
            dfs(i)  # 탐색


# 너비우선탐색
def bfs(V):
    q = deque([V])
    visited2[V] = True # 처음방문하면 True표시
    while q:
        V = q.popleft()
        print(V,end=" ")
        for i in range(1,N+1):
            if not visited2[i] and graph[V][i]: # 만약 i값을 방문하지 않았고 V와 연결이 되어 있다면
                q.append(i)
                visited2[i]=True


dfs(V)
print()
bfs(V)

 

참고소스 https://ji-gwang.tistory.com/291

 

백준 1260번 파이썬 문제풀이(큐와 그래프 - DFS와 BFS)

해당 문제는 DFS와 BFS의 기본개념을 이해하기 좋은문제이다. DFS는 재귀로 구현하는게 보통이고 BFS는 queue로 구현하는게 보통이다. 또한 입력받은 노드의 개수만큼 이차원 리스트로(이차원 리스

ji-gwang.tistory.com

 

반응형