https://www.acmicpc.net/problem/2644
2644번: 촌수계산
사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어
www.acmicpc.net
def bfs(start): # 시작노드만 받는다!
global visited
q=[]
q.append(start)
visited[start] = 1
while q:
t = q.pop(0) # 시작할 정점 뽑아오기
for w in arr[t]: # t와 인접한 노드들(w들) 중
if visited[w] == 0: # w를 방문하지 않았다면?
q.append(w) # 큐에 w를 죄다 집어넣기
visited[w] = visited[t] + 1 # 멀수록 촌수가 점점 늘어나게 누적합처리
n = int(input())
person1, person2 = map(int, input().split())
m = int(input())
arr = [[] for _ in range(n+1)] # 2차원 빈 리스트
visited = [0] * (n + 1) # 1차원 0 리스트
for _ in range(m):
p1, p2 = map(int, input().split())
arr[p1].append(p2) # 인접 리스트 생성
arr[p2].append(p1)
bfs(person1)
if visited[person2] != 0:
print(visited[person2]-1)
else:
print(-1)
인접리스트로 할거면 2차원 빈 리스트를 만들어야됨!
'백준' 카테고리의 다른 글
백준 1697. 숨바꼭질 (0) | 2023.09.01 |
---|---|
백준 7569. 토마토 (0) | 2023.08.31 |
백준 2667. 단지번호붙이기 (0) | 2023.08.29 |
백준 2606번. 바이러스 (0) | 2023.08.29 |
백준 2839. 설탕배달 (0) | 2023.08.29 |