Pagini recente » Cod sursa (job #2803033) | Cod sursa (job #1590224) | Cod sursa (job #1819513) | Cod sursa (job #2847502) | Cod sursa (job #1880236)
#include <iostream>
#include <fstream>
#include <stack>
#include <algorithm>
#include <vector>
using namespace std;
#define MAXN 100001
#define pb push_back
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n , m, x ,y ;
vector < int > G[MAXN];
int grad[MAXN];
int uz[MAXN];
stack < int > st;
stack < int > sol;
void dfs ( int i )
{
uz[i] = 1;
for ( vector < int > ::iterator j = G[i].begin(); j != G[i].end(); j++ )
{
if ( !uz[(*j) ] )
dfs((*j));
}
}
void afis()
{
while(!sol.empty())
{
int x = sol.top();
st.push(x);
sol.pop();
}
while( !st.empty() )
{
g << st.top() << " " ;
st.pop();
if ( st.size() == 1 ) break;
}
}
void euler ( int i )
{
st.push(i);
while ( !st.empty() )
{
int nod = st.top();
if ( G[nod].size() )
{
int vecin = G[nod].back();
G[nod].pop_back();
G[vecin].erase(find(G[vecin].begin(), G[vecin].end(), nod) ) ;
st.push(vecin);
}
else
{
st.pop();
sol.push(nod);
}
}
afis();
}
int main()
{
f >> n >> m;
for ( ; m-- ; )
{
f >> x >> y;
G[x].pb(y);
G[y].pb(x);
grad[x]++;
grad[y]++;
}
dfs(1);
for (int i = 1; i <= n ; i++ )
if ( !uz[i] or grad[i]%2 == 1 )
{
g << -1;
return 0;
}
euler(1);
return 0;
}