Cod sursa(job #2087217)
Utilizator | Data | 13 decembrie 2017 10:00:13 | |
---|---|---|---|
Problema | Ciclu Eulerian | Scor | 30 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.3 kb |
#include <bits/stdc++.h>
using namespace std;
vector <int> G[300];
stack <int> q;
int v,u,n,x,y,ok,rez[40003],nr,m;
void bfs(int u)
{
q.push(u);
while(!q.empty())
{
u=q.top();
if(G[u].size()==0)
{
q.pop();
rez[++nr]=u;
}
else
{
for(int i=0;i<G[u].size();i++)
{
v=G[u][i];
G[u].erase(G[u].begin()+0);
q.push(v);
for(int r=0;r<G[v].size();r++)
if(G[v][r]==u)
{
G[v].erase(G[v].begin()+r);
break;
}
break;
}
}
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
}
for(int i=1;i<=n;i++)
if(G[i].size()%2==1)
{
printf("-1");
return 0;
}
bfs(1);
for(int i=2;i<=nr;i++)
printf("%d ",rez[i]);
return 0;
}