import sys
input = sys.stdin.readline
sys.setrecursionlimit(1000000)
def DFS(r):
visited[r] = True
global cnt
path[r] = cnt
cnt += 1
for i in graph[r]:
if not visited[i]:
DFS(i)
if __name__ == '__main__':
n, m, r = map(int,input().split())
graph =[[] for _ in range(n+1)]
visited = [False] * (n+1)
cnt = 1
path = [0] * (n+1)
for _ in range(m):
u,v = map(int,input().split())
graph[u].append(v)
graph[v].append(u)
for i in range(1, n+1):
graph[i].sort(reverse=True)
DFS(r)
for i in range(1, n+1):
print(path[i])
- 내림차순으로 방문한다는 조건이 있기 때문에 그래프를 입력 받은 뒤 노드마다 들어 있는 인접 노드를 내림차순(큰 수에서 작은수로)으로 정렬해준다.
- 결과를 출력한 리스트 path를 0으로 초기화해주고 방문 순서에 글로벌 변수 cnt를 사용해 순서를 중첩시켜 준다(DFS 내에 cnt를 사용할 경우 중첩 X 매번 DFS() 될때마다 1로 초기화 됨)
- 결과값을 저장한 path리스트를 돌며 저장해둔 횟수를 출력해주면 된다.
'문제풀이 > 백준(Boj) 문제풀이' 카테고리의 다른 글
[백준][이분 탐색] - 1654. 랜선 자르기 (0) | 2022.07.08 |
---|---|
[백준][이분 탐색] - 2805. 나무 자르기 (0) | 2022.07.08 |
[백준][수학] - 17496. 스타후르츠 (0) | 2022.05.02 |
[백준][그래프] - 2667. 단지번호붙이기 (0) | 2022.05.02 |
[백준][그래프] - 2606. 바이러스 (0) | 2022.04.29 |