/*** Řešení prohledáváním do šířky ***/ #include #include using namespace std; #define MAXN 1000000 #define MAXM 10000000 /* Počet vrcholů a hran. */ int N, M; /* Sousedi vrcholů v grafu. */ vector Graph[MAXN]; /* Pomocné proměnné pro prohledávání do šířky. */ int Queue[MAXN]; int Qidx; bool inQueue[MAXN]; int main() { /* Načtení vstupu. */ scanf("%d%d", &N, &M); for (int i = 0; i < M; i++) { int u, v; scanf("%d%d", &u, &v); u--; v--; Graph[u].push_back(v); Graph[v].push_back(u); } /* Prohledávání do šířky. */ Queue[Qidx++] = 0; inQueue[0] = true; for (int i = 0; i < Qidx; i++) { int deg = (int) Graph[Queue[i]].size(); for (int j = 0; j < deg; j++) { if (!inQueue[Graph[Queue[i]][j]]) { inQueue[Graph[Queue[i]][j]] = true; Queue[Qidx++] = Graph[Queue[i]][j]; } } } for (int i = Qidx - 1; i >= 0; i--) { printf("%d%s", Queue[i] + 1, (i > 0) ? " " : "\n"); } return 0; }