Algorithm/Problems

99클럽 코테 스터디 8일차 TIL + DFS

공부좀하시졍 2024. 11. 4. 23:49

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

import sys
input = sys.stdin.readline

n = int(input())
a, b = map(int, input().split())
m = int(input())

graph = [[] for _ in range(n+1)]
visited = [False] * (n+1)
flag = False # 촌수 찾았는지 확인

for _ in range(m):
    x,y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)

def dfs(v, cnt):
    global flag
    visited[v] = True

    if v == b:
        flag = True
        print(cnt)

    for i in graph[v]:
        if visited[i] == False:
            dfs(i, cnt + 1)    

dfs(a, 0)
if flag == False:
    print(-1)
  • x가 y의 부모라는 점에서 graph[y].append(x)를 안해도 된다고 처음에 잘못 생각했지만 양방향 관계이므로 양방향으로 추가해야한다..
  • flag 변수를 이용해 촌수를 찾았는지 여부를 관리한다.
  • a부터 b까지의 depth(cnt)가 답이된다.