Pagini recente » Cod sursa (job #655677) | Cod sursa (job #2909782) | Cod sursa (job #238330) | Cod sursa (job #159240) | Cod sursa (job #651734)
Cod sursa(job #651734)
#include<stdio.h>
#include<vector>
#define lim 100001
using namespace std;
FILE*f=fopen("ciclueuler.in","r");
FILE*g=fopen("ciclueuler.out","w");
int n,m,x,y,ok;
char viz[lim],M[500001];
int d[lim],s[lim];;
vector <pair<int,int> > v[lim];
void dfs(int nod)
{
viz[nod]=1;
for(int i=0;i<(int)v[nod].size();++i)
if(!viz[v[nod][i].first])
dfs(v[nod][i].first );
}
void eurelian(){
for(int i=1;i<=n;++i)
if(d[i]%2||(!viz[i]&&d[i]))
{
ok=1;
break;
}
}
void euler(){
int k=0;
s[++k]=1;
while(k)
{
if(v[s[k]].empty())
{
fprintf(g,"%d ",s[k]);
--k;
}
else
{
if(M[v[s[k]][v[s[k]].size()-1].second])
v[s[k]].pop_back();
else
{
s[++k]=v[s[k-1]][v[s[k-1]].size()-1].first;
M[v[s[k-1]][v[s[k-1]].size()-1].second]=1;
}
}
}
}
int main()
{
fscanf(f,"%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
fscanf(f,"%d%d",&x,&y);
v[x].push_back (make_pair(y,i));
v[y].push_back (make_pair(x,i));
d[y]++;
d[x]++;
}
dfs(1);
if(ok)
fprintf(g,"-1");
else{
euler();
}
fclose(g);
fclose(f);
return 0;
}