#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int N, M, V;
    cin >> N >> M >> V;

    // 그래프 저장
    vector<int> graph[1001];
    bool visited[1001];

    // 방문 배열 초기화
    for (int i = 1; i <= N; i++) {
        visited[i] = false;
    }

    // 간선 입력
    for (int i = 0; i < M; i++) {
        int a, b;
        cin >> a >> b;
        graph[a].push_back(b);
        graph[b].push_back(a);
    }

    // 작은 번호부터 방문하도록 정렬
    for (int i = 1; i <= N; i++) {
        sort(graph[i].begin(), graph[i].end());
    }

    // 스택 만들기
    vector<int> stack;
    stack.push_back(V);

    // DFS 시작
    while (!stack.empty()) {
        int v = stack.back();
        stack.pop_back();

        if (visited[v] == true) {
            continue;
        }

        visited[v] = true;
        cout << v << " ";

        // 스택 특성 때문에 뒤에서부터 넣기
        for (int i = (int)graph[v].size() - 1; i >= 0; i--) {
            int next = graph[v][i];
            if (visited[next] == false) {
                stack.push_back(next);
            }
        }
    }

    return 0;
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: