#문제
2644번: 촌수계산
사람들은 1, 2, 3, …, n (1≤n≤100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어진
www.acmicpc.net
#풀이 & 학습한 내용
인접리스트로 그래프를 저장한 뒤에, 출발점에서 도착점까지의 최단경로를 계산하는 문제입니다. 가중치 없는 간선을 가진 최단경로는 bfs를 이용하면 됩니다.
#소스코드
from collections import deque #큐 사용하기 위해
def bfs(q):
while q:
v=q.popleft()
now_v=v[0] #현재의 vertex
count=v[1] #현재의 vertex까지의 최소 이동횟수
if now_v==find_y: #도달했을 때(bfs니까 이때의 count가 최소)
return count
for adjacent_v in adjacent_list[now_v]:
if not visited[adjacent_v]: #최단경로 찾을 때 bfs니까 방문했던데는 다시 방문필요X
visited[adjacent_v]=True #방문처리
q.append([adjacent_v,count+1]) #이동횟수 1증가시켜서 큐에 넣기
return -1 #큐가 비워질때까지 못찾은거면 경로 없는거다
n=int(input()) #총 사람수
adjacent_list=[[] for _ in range(n+1)] #인접리스트
visited=[False]*(n+1) #index 1부터 사용하니까 (n+1)개 초기화
find_x,find_y=map(int,input().split())
m=int(input())
for _ in range(m):
x,y=map(int,input().split())
adjacent_list[x].append(y)
adjacent_list[y].append(x)
#인접리스트로 그래프 저장
q=deque([[find_x,0]])
print(bfs(q))
github.com/HoYoungChun/Algorithm_PS/blob/master/DFS%26BFS/BOJ_2644.py
HoYoungChun/Algorithm_PS
Baekjoon Online Judge, Programmers problem solving by Python, C++ - HoYoungChun/Algorithm_PS
github.com
'Algorithm > DFS&BFS' 카테고리의 다른 글
| [Python] 백준 2468번 : 안전 영역 (S1) - DFS&BFS 필수문제3 (0) | 2021.03.06 |
|---|---|
| [Python] 백준 5014번 : 스타트링크 (G5) - DFS&BFS 필수문제2 (0) | 2021.03.05 |
| [Python] 백준 1707번 : 이분 그래프 (G4) - DFS&BFS단계별11 (0) | 2021.03.04 |
| [Python] 백준 7562번 : 나이트의 이동 (S2) - DFS&BFS단계별10 (0) | 2021.03.04 |
| [Python] 백준 2206번 : 벽 부수고 이동하기 (G4) - DFS&BFS단계별9 (0) | 2021.03.03 |