본문 바로가기
Algorithm

[탐색/BFS] 백준 2644 촌수계산 - 파이썬(Python)

by jangThang 2022. 6. 5.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    2644번: 촌수계산

    사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     촌수를 계산하는 문제입니다.

     

    2022.02.23 - [Algorithm] - [Algorithm] 너비 우선 탐색(BFS), 가까운 주변부터 찾자

     

    [Algorithm] 너비 우선 탐색(BFS), 가까운 주변부터 찾자

     BFS는 가까운 주변부터 탐색하는 알고리즘입니다. 큐를 이용한 BFS 구현방법과 코드를 알아보겠습니다. [ Contents ] 1. BFS(Breath First Search) 너비 우선 탐색(BFS): 가까운 주변 노드부터 탐색하며 점점.

    star7sss.tistory.com

     가족관계도를 입력받고, 촌수를 계산해야 합니다. 가족도 '부모 - 자식' 간의 관계로, 그래프의 부모 노드 - 자식 노드와 똑같습니다. 부모관계를 입력받아 가족관계 그래프를 저장하고, BFS탐색 또는 DFS탐색으로 촌수를 계산합니다.

     

     

     

    3. 코드

    from collections import deque
    
    # 입력
    n = int(input())
    start, end = map(int, input().split())
    m = int(input())
    
    graph = [[] for _ in range(n+1)]
    for _ in range(m):
        a, b = map(int, input().split())
        graph[a].append(b)
        graph[b].append(a)
    
    # bfs 탐색
    visited = [False] * (n+1)
    queue = deque([(start, 0)])
    visited[start] = True
    
    while queue:
        x, cnt = queue.popleft()
        if x == end:
            print(cnt)
            break
    
        for i in graph[x]:
            if not visited[i]:
                queue.append((i, cnt+1))
                visited[i] = True
    else:
        print(-1)

     BFS 코드에 대한 설명은 위 링크에서 찾아보실 수 있습니다.

     

    star가 되고나서 Tistory

    반응형

    댓글