Pagini recente » Cod sursa (job #1996733) | Cod sursa (job #162130) | Cod sursa (job #2495654) | Cod sursa (job #2233857) | Cod sursa (job #596930)
Cod sursa(job #596930)
#include <fstream>
#include <vector>
using namespace std;
const int N=100005,inf=1<<30;
vector<int> a[N],P[N];
int E[5*N],n;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
inline void push(int x,int y)
{
if (x==y)
{
a[x].push_back(x);
P[x].push_back(a[x].size());
P[x].push_back(a[x].size()-1);
a[x].push_back(x);
return;
}
P[x].push_back(a[y].size());
P[y].push_back(a[x].size());
a[x].push_back(y);
a[y].push_back(x);
}
inline void pop(int x,int y,int p)
{
a[x][p]=a[y][P[x][p]]=-1;
}
void euler(int x)
{
for (unsigned int i=0;i<a[x].size();i++)
if (a[x][i]!=-1)
{
int q=a[x][i];
pop(x,q,i);
euler(q);
}
E[++E[0]]=x;
}
int main()
{
int m,x,y,i;
in>>n>>m;
while (m--)
{
in>>x>>y;
push(x,y);
}
for (i=1;i<=n;i++)
if (a[i].size() & 1)
{
out<<"-1\n";
return 0;
}
euler(1);
for (i=E[0];i;i--)
out<<E[i]<<" ";
out<<"\n";
}