Pagini recente » Cod sursa (job #1273310) | Cod sursa (job #646616) | Cod sursa (job #1360496) | Cod sursa (job #2369222) | Cod sursa (job #434169)
Cod sursa(job #434169)
#include <cstdio>
#include <vector>
#include <utility>
#include <list>
#include <stack>
using namespace std;
#define pb push_back
#define mp make_pair
#define fi first
#define se second
FILE *in,*out;
list<int> a[100005];
int sters [500005];
int gr[100005];
vector<int> rez;
stack<int> s;
/*void euler(int x)
{
int i;
for (i=0;i<a[x].size();i++)
if (!sters[a[x][i].se])
{
sters[a[x][i].se]=1;
euler(a[x][i].fi);
}
rez.pb(x);
}*/
int main()
{
int n,m,x,y,i,nod,aux,next;
list<int>::iterator it;
in=fopen("ciclueuler.in","r");
out=fopen("ciclueuler.out","w");
fscanf(in,"%d%d",&n,&m);
for (i=1;i<=m;i++)
{
fscanf(in,"%d%d",&x,&y);
gr[x]++;
gr[y]++;
a[x].pb(y);
a[y].pb(x);
}
for (i=1;i<=n;i++)
if (gr[i]%2==1)
{
fprintf(out,"-1\n");
fclose(in);
fclose(out);
return 0;
}
s.push(1);
while (!s.empty())
{
nod=s.top();
s.pop();
while (1)
{
if (a[nod].empty())
{
rez.pb(nod);
break;
}
next=a[nod].front();
a[nod].pop_front();
for (it=a[next].begin();it!=a[next].end();++it)
if (*it==nod)
{
a[next].erase(it);
break;
}
s.push(nod);
nod=next;
}
}
if (rez.size()!=m+1)
fprintf(out,"-1\n");
else
{
for(i=rez.size()-1;i>0;i--)
fprintf(out,"%d ",rez[i]);
fprintf(out,"\n");
}
fclose(in);
fclose(out);
return 0;
}