문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인

6098 : 위상 정렬 DFS — 역방향 DFS

•시간제한: 1.000 S •메모리제한: 256 MB •제출: 0 •통과: 0 •만든사람: suakii

6098 : 위상 정렬 DFS — 역방향 DFS

시간 1.000s · 메모리 256MB · 제출 0 · 정답 0

문제 설명

방향성 비사이클 그래프(DAG)가 주어졌을 때, 모든 노드를 순서대로 위상 정렬(Topological Sort)하는 프로그램을 작성하십시오.

정렬 규칙:
1. DFS 역순(Post-order finish time의 역순) 방식을 사용하여 위상 정렬을 구현합니다.
2. DFS를 시작할 정점은 1번부터 N번까지 오름차순으로 탐색을 시도합니다.
3. DFS 탐색 시 인접한 다음 정점을 방문할 때는 번호가 작은 정점부터 순서대로 방문합니다.

[제약 조건]
• 정점 수 $N$: $1 \le N \le 1{,}000$ (정수)
• 간선 수 $M$: $0 \le M \le 5{,}000$ (정수)
• 입력 그래프는 DAG(방향성 비사이클 그래프)입니다.

입력 설명

첫째 줄에 정점의 개수 N (1 ≤ N ≤ 1,000)과 방향 간선의 개수 M (0 ≤ M ≤ 5,000)이 주어집니다.
둘째 줄부터 M개의 줄에 걸쳐 방향 간선 u v (u에서 v로 이동 가능)가 주어집니다.

출력 설명

위상 정렬을 수행한 결과를 정점 번호로 공백을 구분하여 한 줄에 출력합니다.

입력 예시
COPY
복사되었습니다!

4 4
1 2
1 3
2 4
3 4

출력 예시
COPY
복사되었습니다!

1 3 2 4

도움

DFS 호출이 끝난(더 이상 갈 곳이 없는) 시점에 정점 번호를 스택이나 리스트에 저장합니다. 모든 탐색이 끝난 후 이 저장된 리스트를 역순으로 뒤집으면 위상 정렬 결과를 얻을 수 있습니다.

출처/분류

NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘