Pagini recente » Cod sursa (job #2491085) | Cod sursa (job #3261650) | Cod sursa (job #1054450) | Cod sursa (job #772248) | Cod sursa (job #2171585)
#include<bits/stdc++.h>
# define NR 100005
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector <int> G[NR], st;
int n,m,ok;
int grad[NR],viz[NR],val;
void DFS (int k)
{
viz[k]=1;
for (int i=0;i<(int)G[k].size();++i)
if (!viz[G[k][i]])
DFS(G[k][i]);
}
void euler (int k)
{
st.push_back(k);
while(st.size())
{
k=st.back();
if(G[k].size())
{
int y=G[k].back();
G[k].pop_back();
st.push_back(y);
G[y].erase(find(G[y].begin(),G[y].end(),k));
}
else
{
ok++;
if(ok==1)
val=k,g<<k<<" ";
if(val!=k)
g<<k<<" ";
st.pop_back();
}
}
}
int main ()
{
int i,x,y;
f>>n>>m;
for (i=1;i<=m;++i)
{
f>>x>>y;
G[x].push_back(y);
++grad[x];
G[y].push_back(x);
++grad[y];
}
DFS(1);
for(i=1;i<=n;++i)
if (grad[i]%2==1||viz[i]==0)
{
g << "-1\n";
return 0;
}
euler (1);
g<<"\n";
return 0;
}