Pagini recente » Cod sursa (job #1476888) | Cod sursa (job #2598603) | Cod sursa (job #1508323) | Cod sursa (job #2537662) | Cod sursa (job #653254)
Cod sursa(job #653254)
#include <list>
#include<stack>
#include <cstdio>
using namespace std;
FILE *g,*f;
list<int> v[100005];
stack<int> stk;
list<int>::iterator it;
int n,m,x,y,c[100005],next;
void dfss(int nod)
{c[nod]=1; x++;
list<int>::iterator it;
for( it=v[nod].begin();it!=v[nod].end();it++)
if(!c[*it])
dfss(*it);
}
int main ()
{int i;
f=fopen("ciclueuler.in","r");
g=fopen("ciclueuler.out","w");
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=m;i++)
{fscanf(f,"%d %d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);}
for(i=1;i<=n;i++)
if(v[i].size()%2){ fprintf(g,"-1"); return 0;}
x=0;
dfss(1);
if(x!=n) fprintf(g,"-1");
else
{x=v[1].front();
v[1].pop_front();
for(it=v[x].begin();it!=v[x].end();it++)
if(*it==1) {v[x].erase(it); break;}
stk.push(x);
while(!stk.empty())
{
while(!v[stk.top()].empty())
{next=v[stk.top()].front();
v[stk.top()].pop_front();
for( it=v[next].begin();it!=v[next].end();++it)
if(*it==stk.top()) {v[next].erase(it); break;}
stk.push(next);
}
fprintf(g,"%d ",stk.top());
stk.pop();
}
}
fclose(f); fclose(g);
return 0;
}