Lumpy Space Princess - Adventure Time
코딩테스트/백준

백준[24480] - 알고리즘 수업 (깊이 우선 탐색 2)

yaebb_82 2023. 2. 28.

 

 

문제

 

24480번: 알고리즘 수업 - 깊이 우선 탐색 2

첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에 간선 정보 u v가 주어지며 정점 u와 정점 v의 가중치 1인 양

www.acmicpc.net

 

 

작성한 코드

import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)

N, M, R = map(int, input().split())
graph = [[] for _ in range(N+1)]
visited = [0] * (N+1)
order = 1

for _ in range(M):
    u, v = map(int, input().split())
    graph[u].append(v)
    graph[v].append(u)

for i in range(N+1):
    graph[i].sort(reverse = True)

def dfs(v):
    global order
    visited[v] = order

    for i in graph[v]:
        if visited[i] == 0:
            order += 1
            dfs(i)

dfs(R)

for i in range(1, N+1):
    print(visited[i])

→ 이전 문제와 풀이 방식은 동일하나, 오름차순으로 방문하냐 vs 내림차순으로 방문하냐 의 차이이다.

→ 해당 문제는 내림차순으로 방문하기 때문에 : sort(reverse = True) 해주면 된다.

 

cf.) 이전 풀이 방식 참고

 

백준[24479] - 알고리즘 수업 (깊이 우선 탐색 1)

문제 24479번: 알고리즘 수업 - 깊이 우선 탐색 1 첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에 간선 정보 u v가 주어지며

bingguel.tistory.com

 

 

 

반응형

댓글