Pagini recente » Cod sursa (job #2631855) | Cod sursa (job #299507) | Cod sursa (job #620358) | Cod sursa (job #2789030) | Cod sursa (job #2509414)
#include <fstream>
#include <vector>
#include <stack>
#include <functional>
using namespace std;
vector<pair<pair<int, int>, bool>> muchii;
vector<int> noduri[100000];
int n, m;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
bool eEulerian(){
vector<int> body;
for (int i = 0; i < n; ++i) {
body.push_back(0);
if(noduri[i].size() % 2 != 0)
return false;
}
// int bodies = 1;
// function<void(int, vector<int>&, int)> dfs = [&dfs](int nod, vector<int> &body, int bodies) -> void {
// if(!noduri[nod].empty()){
// body[nod] = bodies;
// }
// for (int i : noduri[nod]) {
// int destination = muchii[i].first.second;
// if(body[destination] == 0)
// dfs(destination, body, bodies);
// }
// };
// for (int i = 0; i < n; ++i) {
// if(!noduri[i].empty() && body[i] == 0){
// if(bodies == 2)
// return false;
// dfs(i, body, bodies++);
// }
// }
return true;
}
void euler(){
stack<int> S;
for(int i = 0; i < n; ++i){
if(!noduri[i].empty()){
S.push(i);
break;
}
}
while(!S.empty()){
int nod = S.top();
if(noduri[nod].empty()){
S.pop();
if(!S.empty())
g<<nod + 1<<' ';
continue;
}
int muchie = noduri[nod].back();
if(muchii[muchie].second){
noduri[nod].pop_back();
continue;
}
if(muchii[muchie].first.first == nod)
S.push(muchii[muchie].first.second);
else S.push(muchii[muchie].first.first);
muchii[muchie].second = true;
noduri[nod].pop_back();
}
}
int main() {
f>>n>>m;
for (int i = 0; i < m; ++i) {
int start, end;
f>>start>>end;
muchii.emplace_back(make_pair(start - 1, end - 1), false);
noduri[start - 1].push_back(muchii.size() - 1);
noduri[end - 1].push_back(muchii.size() - 1);
}
if(eEulerian()){
euler();
}else g<<-1;
return 0;
}