Pagini recente » Cod sursa (job #82469) | Cod sursa (job #1873128) | Cod sursa (job #2435114) | Cod sursa (job #2959868) | Cod sursa (job #999845)
Cod sursa(job #999845)
#include<fstream>
#include<list>
#include<queue>
#include<stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct nod{
bool vizitat;
int grad;
list<int> vecini;
};
int n, m, a, b, i;
nod nodes[100002];
stack<int> stiva1, stiva2;
bool check() {
queue<int> coada;
bool ok =true;
int x;
list<int>::iterator it;
coada.push(1);
while(!coada.empty()) {
x = coada.front();
coada.pop();
for(it = nodes[x].vecini.begin(); it != nodes[x].vecini.end(); ++it) {
if(nodes[*it].vizitat == false) {
nodes[*it].vizitat = true;
coada.push(*it);
}
}
}
for(i = 1; i <= n; i++) {
if((nodes[i].grad % 2 == 1) || (nodes[i].vizitat == false)) {
ok = false;
}
}
return ok;
}
void cicle(int x) {
int a = x, b = 0;
list<int>::iterator it;
while(b != x) {
b = nodes[a].vecini.front();
nodes[a].vecini.pop_front();
nodes[a].grad--;
for(it = nodes[b].vecini.begin(); it != nodes[b].vecini.end(); ++it){
if(*it == a) {
nodes[b].vecini.erase(it);
nodes[b].grad--;
break;
}
}
stiva1.push(b);
a = b;
}
}
int main() {
fin >> n >> m;
for(i = 0; i < m; i++){
fin >> a >> b;
nodes[a].vecini.push_back(b);
nodes[b].vecini.push_back(a);
nodes[a].grad++;
nodes[b].grad++;
}
if(check() == true){
stiva1.push(1);
cicle(stiva1.top());
stiva1.pop();
while(!stiva1.empty()) {
if(nodes[stiva1.top()].grad != 0) {
cicle(stiva1.top());
}
else {
stiva2.push(stiva1.top());
stiva1.pop();
}
}
while(!stiva2.empty()) {
fout << stiva2.top() << ' ';
stiva2.pop();
}
}
else {
fout << -1;
}
fin.close();
fout.close();
return 0;
}