Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Life Engineering

[BOJ 2644] 촌수계산 (Python) 본문

Problem Solving

[BOJ 2644] 촌수계산 (Python)

흑개 2021. 2. 9. 00:01

www.acmicpc.net/problem/2644

 

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로 짠것도 조만간 올릴것..!!