티스토리 뷰
2644번: 촌수계산
사람들은 1, 2, 3, …, n (1≤n≤100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어진
www.acmicpc.net
n=int(input())
a,b=map(int, input().split())
graph=[[] for _ in range(n+1)]
visited=[False]*(n+1)
m=int(input())
result=-1
for _ in range(m):
i,j=map(int, input().split())
graph[i].append(j)
graph[j].append(i)
def dfs(a, b, count):
global result
if a==b:
result=count
visited[a]=True
for i in graph[a]:
if visited[i]==False:
dfs(i,b,count+1)
return result
print(dfs(a,b,0))
DFS를 이용했다.
기준점 A 를 기준으로 count를 1씩 늘려 탐색한 뒤, 탐색 대상이 목표인 B와 같다면 result 변수에 count를 저장한다.
모든 재귀의 호출이 끝난 뒤 result를 리턴한다.
---
BFS로 하면 더 효율적으로 짤 수 있을 듯.
visited[사람수] 배열 만들어서 1씩 추가해주면.. 메모리 절약할듯.. 괜히 DFS 써서 재귀 이용해서 좀 힘들어졌었다..
BFS로 짠것도 조만간 올릴것..!!
'Problem Solving' 카테고리의 다른 글
[BOJ 9205] 맥주 마시면서 걸어가기 (Python3) (0) | 2021.02.14 |
---|---|
[BOJ 2467] 용액(Python) (0) | 2021.02.13 |
[BOJ 1987] 알파벳 (Python) (0) | 2021.02.08 |
상환 후 남은 돈이 얼마? (knk ch2-8) (0) | 2018.07.17 |
달러를 나누자! (knk ch2-7) (0) | 2018.07.17 |