반응형

[ Contents ]
1. 문제 (링크 참조)
24445번: 알고리즘 수업 - 너비 우선 탐색 2
첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에 간선 정보 u v가 주어지며 정점 u와 정점 v의 가중치 1인 양
www.acmicpc.net
2. 문제 풀이
BFS 탐색 알고리즘을 적용하는 예제 문제입니다.
2023.06.30 - [Algorithm] - [탐색/BFS] 백준 24444 알고리즘 수업 - 너비 우선 탐색 1 - Python
[탐색/BFS] 백준 24444 알고리즘 수업 - 너비 우선 탐색 1 - Python
[ Contents ] 1. 문제 (링크 참조) 24444번: 알고리즘 수업 - 너비 우선 탐색 1 첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에
star7sss.tistory.com
1은 오름차순으로 정렬해서 탐색하는 문제였고, 2는 내림차순으로만 정렬해서 탐색하면 됩니다.
해당 코드의 해설은 위 링크에서 보실 수 있습니다.
3. 코드
from collections import deque
import sys
input = sys.stdin.readline
N, M, R = map(int, input().split())
graph = [[] for _ in range(N+1)]
# BFS 탐색 (탐색할 그래프, 노드 수, 시작 지점)
for _ in range(M):
u, v = map(int, input().split())
graph[u].append(v)
graph[v].append(u)
visited = [0]*(N+1) #방문 여부를 확인할 리스트
visited[R] = 1 #시작 노드 방문
queue = deque([R]) #인접 노드를 저장할 Queue
#모든 노드를 탐색할 때까지 반복
cnt = 1
while queue:
#방문 노드
node = queue.popleft()
graph[node].sort(reverse=True) # 내림차순으로 방문
#방문한 노드의 주변 노드를 큐에 삽입
for i in graph[node]:
#방문하지 않는 주변 노드일 경우
if not visited[i]:
queue.append(i) #큐에 추가
cnt += 1
visited[i] = cnt #방문
#출력
for i in visited[1:]:
print(i)

반응형
'Algorithm' 카테고리의 다른 글
[구현/수학] 백준 9063 대지 - 파이썬(Python) (0) | 2023.07.01 |
---|---|
[구현/수학] 백준 10813 공 바꾸기 - 파이썬(Python) (0) | 2023.07.01 |
[탐색/BFS] 백준 1325 효율적인 해킹 - 파이썬(Python) (0) | 2023.06.30 |
[탐색/BFS] 백준 11060 점프 점프 - 파이썬(Python) (0) | 2023.06.30 |
[탐색/BFS] 백준 1926 그림 - 파이썬(Python) (0) | 2023.06.30 |
댓글