Pagini recente » Cod sursa (job #395578) | Cod sursa (job #2050567) | Cod sursa (job #2493980) | Cod sursa (job #1725215) | Cod sursa (job #2758665)
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
FILE*in=fopen("ciclueuler.in","r");
FILE*out=fopen("ciclueuler.out","w");
int n,m,x,y,i,grad[100005],ct;
bool use[500005],b[100005];
struct muchie
{
int nr;
int nrord;
};
muchie z;
vector<muchie> v[100005];
queue<int> q;
void bfs()
{
while(!q.empty())
{
int g=q.front();
q.pop();
for(int t=0;t<v[g].size();t++)
{
if(b[v[g][t].nr]==0)
{
q.push(v[g][t].nr);
b[v[g][t].nr]=1;
}
}
}
}
void euler(int nod)
{
while(grad[nod]>0)
{
if(use[v[nod].back().nrord]==0)
{
grad[nod]--;
grad[v[nod].back().nr]--;
use[v[nod].back().nrord]=1;
euler(v[nod].back().nr);
}
v[nod].pop_back();
}
ct++;
if(ct<=m)
{
fprintf(out,"%d ",nod);
}
}
int main()
{
fscanf(in,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{
fscanf(in,"%d%d",&x,&y);
z.nr=y;
z.nrord=i;
v[x].push_back(z);
grad[x]++;
z.nr=x;
v[y].push_back(z);
grad[y]++;
}
for(i=1;i<=n;i++)
{
if(grad[i]%2==1)
{
fprintf(out,"-1");
return 0;
}
}
b[1]=1;
q.push(1);
bfs();
for(i=1;i<=n;i++)
{
if(b[i]==0)
{
fprintf(out,"-1");
return 0;
}
}
euler(1);
}