풀이
- 문제 이해를 못했어서 조금 시간이 걸렸는데
- 분명 dfs로 해결은 했는데 뭐가 문제지 싶어서
- 계속 찾아본 결과
- 방문한 순서를 1~n번까지 순서대로 나열하는 문제라는 것을 알게 되었다.
- 아래 코드는 다른 dfs 코드와 비슷할 것이기에 풀이를 따로 작성할 것은 없지만
- 양방향으로 연결해야 하기에 아래와 같이 작성했으며
- _dic[u].append(v)
- _dic[v].append(u)
- 오름차순으로 방문한다고 했기에 정렬을 하지만 dfs로 방문하기에
- reverse=True를 사용해서 내림차순 정렬을 하여 역순으로 stack에 추가하면
- 오름차순이 되도록 해주기!
import sys
from collections import deque
input = sys.stdin.readline
n,m,r = map(int,input().split())
_dic = {i:[] for i in range(1,n+1)}
visit = [0]*(n+1)
for i in range(m):
u,v = map(int,input().split())
_dic[u].append(v)
_dic[v].append(u)
for i in range(1,n+1): _dic[i].sort(reverse=True)
stack = deque([r])
cnt = 0
while stack:
s = stack.pop()
if visit[s]: continue
cnt += 1
visit[s] = cnt
for i in _dic[s]:
if not visit[i]: stack.append(i)
[print(i) for i in visit[1:]]
'알고리즘' 카테고리의 다른 글
[백준, 파이썬, 14405번] 피카츄 (2) | 2023.10.01 |
---|---|
[백준, 파이썬, 24444번] 알고리즘 수업 - 너비 우선 탐색 1 (0) | 2023.09.30 |
[백준, 파이썬, 1284번] 집 주소 (0) | 2023.09.29 |
[백준, 파이썬, 15652번] N과 M (4) (0) | 2023.09.25 |
[백준, 파이썬, 7795번] 먹을 것인가 먹힐 것인가 (0) | 2023.09.24 |