Pagini recente » Cod sursa (job #1769304) | Cod sursa (job #886271) | Cod sursa (job #1010600) | Cod sursa (job #561871) | Cod sursa (job #3195500)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
struct edge{
int nod1;
int nod2;
};
vector < vector<int> > graph;
vector <edge> edges;
vector <int> euler;
vector <bool> deleted;
int get_next(int node){
while (!graph[node].empty() and deleted[graph[node].back()]){
graph[node].pop_back();
}
if(graph[node].empty())
return 0;
int index = graph[node].back();
deleted[index] = true;
edge muchie = edges[index];
return muchie.nod1 + muchie.nod2 - node;
}
void find_euler(int node){
while(int next = get_next(node))
find_euler(next);
euler.push_back(node);
}
int main() {
int n, m;
cin >> n >> m;
graph.resize(n + 5);
deleted.resize(n + 5);
for (int i = 0; i < m; ++i) {
int x, y;
cin >> x >> y;
edges.push_back({x, y});
graph[x].push_back(edges.size() - 1);
graph[y].push_back(edges.size() - 1);
}
find_euler(1);
for (int nodcrt : euler) {
cout << nodcrt << ' ';
}
return 0;
}