입력 받고 각 노드를 오름차순으로 정렬한 후 DFS를 실행하였다. 방문한 기록이 없는 노드에만 DFS를 실행하고, cnt를 전역변수로 지정하여 DFS를 돌 때마다 값을 하나씩 증가시키며 방문 순서를 저장하였다.
코드
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
vector <int> V[100001];
int visited[100001];
int N, M, R, cnt = 0;
void DFS(int R) {
visited[R] = ++cnt;
for (int i : V[R]) {
if (!visited[i]) DFS(i);
}
}
int main() {
int a, b;
// input
scanf("%d %d %d", &N, &M, &R);
for (int i = 0; i < M; i++) {
scanf("%d %d", &a, &b);
V[a].push_back(b);
V[b].push_back(a);
}
// 오름차순 정렬
for (int i = 1; i <= N; i++) {
if (V[i].size() > 1)
sort(V[i].begin(), V[i].end());
}
DFS(R);
// print
for (int i = 1; i <= N; i++)
printf("%d\n", visited[i]);
return 0;
}