Pagini recente » Cod sursa (job #222384) | Cod sursa (job #335220) | Istoria paginii utilizator/lervs_ciocan_craiu_gemene | Istoria paginii utilizator/fumfum1 | Cod sursa (job #1836664)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
vector <vector <int> > a;
vector <int> x;
void read()
{
int n,m;
cin >> n >> m;
a.resize(n+1);
for (int x,y,i=0; i<m; i++)
{
cin >> x >> y;
a[x].push_back(y);
a[y].push_back(x);
}
}
int i;
void del(int x, int y)
{
for (int i=0; i<a[x].size(); i++)
if (a[x][i]==y)
{
swap(a[x][i],a[x][a[x].size()-1]);
a[x].pop_back();
return;
}
}
int c=0;
vector <int> eul(int v)
{
vector <int> x,y;
int w;
c++;
x.push_back(v);
if (count(a[v].begin(),a[v].end(),i)!=0 && c>2) return x;
while (a[v].size()!=0)
{
w=a[v][a[v].size()-1];
a[v].pop_back();
del(w,v);
y=eul(w);
if (y.size()!=0) break;
}
for (int i=0; i<y.size(); i++)
x.push_back(y[i]);
return x;
}
void write()
{
if (x.size()<1) cout << "-1" ;
else
for (int i=0; i<x.size(); i++)
cout << x[i] << ' ';
}
main()
{
read();
for (i=1; i<a.size(); i++)
{
x=eul(i);
if (x.size()>1) break;
}
write();
}