Pagini recente » Istoria paginii runda/easy_oji_x/clasament | Cod sursa (job #785508) | Istoria paginii runda/the_dolphin_project | Cod sursa (job #2921784) | Cod sursa (job #1383092)
#include <fstream>
#include <list>
#include <vector>
#define n_max 100001
using namespace std;
ifstream r("ciclueuler.in");
ofstream w("ciclueuler.out");
vector <int> G[n_max],sol;
list <int> L;
int n,m;
bool eulerian() {
for (int i=1; i<=n;i++)
if (G[i].size() % 2!=0)
return false;
return true;
}
void read() {
int i,j,k;
r>>n>>m;
for (k=1; k<=m; k++) {
r>>i>>j;
G[i].push_back(j);
G[j].push_back(i);
}
}
void ciclu(int x) {
int nod,y;
L.push_back(x);
while (!L.empty()) {
nod=L.back();
if (!G[nod].empty()) {
y=G[nod].back();
L.push_back(y);
G[nod].pop_back();
for (vector <int>::iterator it=G[y].begin(); it!=G[y].end();it++)
if (*it==nod) {
G[y].erase(it);
break;
}
}
else {
sol.push_back(nod);
L.pop_back();
}
}
}
int main() {
read();
if (eulerian()) {
ciclu(1);
for (int i=0; i<sol.size(); i++) //== for (vector <int>::iterator it=sol.begin(); it!=sol.end(); it++)
w<<sol[i]<<" "; //== w<<*it<<" ";
}
else
w<<-1;
r.close();
w.close();
return 0;
}