반응형
문제
https://www.acmicpc.net/problem/2644
코드
import sys
sys.setrecursionlimit(10**7)
n = int(input())
a, b = map(int, input().split())
m = int(input())
graph = [[] for _ in range(n+1)]
visited = [False] * (n+1)
res = list()
for _ in range(m):
x, y = map(int, input().split())
graph[x].append(y)
graph[y].append(x)
def dfs(v, cnt):
cnt += 1
visited[v] = True
if v == b:
res.append(cnt)
for i in graph[v]:
if not visited[i]:
dfs(i, cnt)
dfs(a, 0)
if len(res) == 0:
print(-1)
else:
print(res[0] - 1)
설명
재귀 제한을 늘려주기 위해 'sys.setrecursionlimit'을 사용해 주었다.
이후 주어진 입력값을 받아주고,
dfs를 위한 그래프와 방문 리스트를 생성해 준다.
정답값을 넣기 위한 리스트도 하나 만들어준다.
이후 일반적인 dfs와 동일하게 진행해 준다.
우선 노드의 연결 관계를 입력받아준다.
그리고 dfs에 cnt 값을 넣어주어 몇 번 진행되었는지(촌수가 어떻게 되는지)를 파악한다.
dfs가 시작할 때 cnt를 1 늘려주고,
이때 dfs를 진행하는 노드의 번호가 목표 노드의 번호와 같으면 현재의 cnt값을 res에 넣어준다.
그 외의 경우에는 dfs를 계속 진행한다.
dfs를 종료하고 결괏값이 존재하면 결괏값의 1을 뺀 값(dfs 시작 부분에 1을 늘렸으므로)을 출력.
그렇지 않으면 -1을 출력한다.
반응형
'개발 연습장 > 백준 문제풀이' 카테고리의 다른 글
[파이썬, Python] 백준 14916: 거스름돈 (0) | 2023.05.25 |
---|---|
[파이썬, Python] 백준 10825: 국영수 (0) | 2023.05.24 |
[파이썬, Python] 백준 11931: 수 정렬하기 4 (0) | 2023.05.22 |
[파이썬, Python] 백준 1789: 수들의 합 (0) | 2023.05.19 |
[파이썬, Python] 백준 11724: 연결 요소의 개수 (0) | 2023.05.18 |