Pagini recente » Cod sursa (job #5628) | Cod sursa (job #66767) | Cod sursa (job #40249) | Cod sursa (job #2961780) | Cod sursa (job #1317486)
#include <fstream>
#include <list>
#include <stack>
#include <queue>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
list< int > G[100010], L;
stack< int > S;
queue< int > coada;
int n, m,i,u,v,w,deg[100010], col[100010];
bool bun=true;
list<int>::iterator it;
void sterge( int v, int w )
{
list<int>::iterator it;
deg[v]--, deg[w]--;
G[v].pop_front();
for( it=G[w].begin(); it!=G[w].end(); it++)
if( *it == v )
{
G[w].erase( it );
break;
}
}
int main()
{
f>>n>>m;
for(i=0; i<m; i++)
{
f>>u>>v;
G[u].push_back(v);
deg[u]++;
G[v].push_back(u);
deg[v]++;
}
coada.push(1);
col[1] = 1;
while( !coada.empty() )
{
v = coada.front();
coada.pop();
for( it = G[v].begin(); it != G[v].end(); it++ )
if(col[*it] == 0)
{
coada.push(*it);
col[*it] = 1;
}
}
for( i = 2; i <= n; i++ )
if( col[i] == 0 )
{
bun=false;
break;
}
for( i = 1; i <= n; i++ )
if( deg[i] % 2 == 1 )
{
bun=false;
break;
}
if(!bun) g<<"-1";
else
{
v=1;
do
{
while( true )
{
if(G[v].empty())
break;
w = G[v].front();
S.push(v);
sterge(v,w);
v = w;
}
v = S.top();
S.pop();
L.push_back(v);
}
while(!S.empty());
for(it=L.begin(); it!=L.end(); it++)
g<<*it<<" ";
g<<'\n';
}
return 0;
}