Pagini recente » Cod sursa (job #1375742) | Cod sursa (job #1592049) | Cod sursa (job #1535526) | Cod sursa (job #1309215) | Cod sursa (job #1836673)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
int n,m;
vector <vector <int> > a;
vector <int> x;
void read()
{
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>=m) 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;
}
c--;
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()-1; i++)
cout << x[i] << ' ';
if (x[0]!=x[x.size()-1]) cout << x[x.size()-1];
}
main()
{
read();
for (i=1; i<a.size(); i++)
{
x=eul(i);
if (x.size()>1) break;
}
write();
}