티스토리 뷰

Algorithm

[graph] BFS 기본 구현

lluna 2021. 10. 13. 23:14

문제



접근

import sys
sys.stdin = open('input.txt')

from collections import deque

V, E = map(int, input().split()) # 7, 8
edge = list(map(int, input().split())) # [1, 2, 1, 3, 2, 4, 2, 5, 4, 6, 5, 6, 6, 7, 3, 7]


# 인접 행렬을 만든다.
graph = [[0]*(V+1) for _ in range(V+1)] # (V+1 * V+1) 행렬
for i in range(E):
    ni, nj = edge[2*i], edge[2*i+1]
    graph[ni][nj] = 1
    graph[nj][ni] = 1  # 무방향 그래프


# 큐와 visited 설정한다.
deque_que = deque()
visited = [False] * (V+1)


def BFS(graph, start_node):
    # 시작 노드를 큐에 넣고 방문처리한다.
    deque_que.append(start_node)
    visited[start_node] = True

    # 큐가 빌 때까지
    while deque_que:
        # 1. 큐의 첫번째 원소를 반환한다.
        node = deque_que.popleft()
        # 출력
        print(node)
        # 2. node와 연결된 모든 선을 돌면서
        for w in range(1, V+1):
            # 아직 방문하지 않은 곳이면
            if graph[node][w] == 1 and not visited[w]:
                # 방문표시하고 큐에 넣는다.
                visited[w] = True
                deque_que.append(w)

BFS(graph, 1)
댓글