백준 :: 촌수계산 <2644번>

혜 콩·2022년 6월 19일
0

알고리즘

목록 보기
26/61

> 문제 <

https://www.acmicpc.net/problem/2644

> 아이디어 <


dfs(사람번호, 촌수)
매개변수로 들어온 사람노드를 방문처리 and 촌수 +1 , 현재 노드가 b라면 result에 저장해준다.
dfs가 재귀함수로 반복되므로 일반 정수 변수에 저장해두면 이전에 호출되었던 dfs로 돌아가면서 촌수가 다르게 저장됨.
고로, result 리스트에 원소로 저장해두기!

현재 노드에 엮여있는 자식, 부모 등 노드들 dfs 돌리기

> 코드 <

# (clone)
N = int(input())
a, b = map(int, input().split())            # 계산해야하는 두 사람의 번호
M = int(input())
relation = [[] for _ in range(N+1)]         # 엮여있는 노드 저장하는 2차원 배열
visited = [False] * (N+1)
result = []

for _ in range(M):
    x, y = map(int, input().split())
    relation[x].append(y)       # 자식
    relation[y].append(x)       # 부모

def dfs(v, num):
    num += 1
    visited[v] = True

    if v == b:
        result.append(num)

    for i in relation[v]:
        if not visited[i]:
            dfs(i, num)

dfs(a, 0)
if len(result) == 0:
    print(-1)
else:
    print(result[0]-1)
profile
배우고 싶은게 많은 개발자📚

0개의 댓글