Pagini recente » Cod sursa (job #813166) | Cod sursa (job #2959138) | Cod sursa (job #116946) | Cod sursa (job #37726) | Cod sursa (job #1134461)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int MAXN = 100009;
int N, M, sol[MAXN*5], l;
vector < int > ind[MAXN];
bool used[MAXN*5],viz[MAXN];
struct muchii
{
int unu, doi;
} v[MAXN*5];
void citire()
{
fin >> N >> M;
for (int i = 1; i <= M; ++i)
{
int x, y;
fin >> x >> y;
v[i].unu = x, v[i].doi = y;
ind[x].push_back(i);
ind[y].push_back(i);
}
}
void conex(int nod){
viz[nod]=true;
for(unsigned i=0;i<ind[nod].size();i++)
if(v[ind[nod][i]].unu==nod){
if(viz[v[ind[nod][i]].doi]==false)
conex(v[ind[nod][i]].doi);
}
else{
if(viz[v[ind[nod][i]].unu]==false)
conex(v[ind[nod][i]].unu);
}
}
inline int varf(int nod, int val)
{
if ( v[nod].unu == val )
return v[nod].doi;
return v[nod].unu;
}
inline void ciclu_euler(int tata)
{
int L = ind[tata].size();
for (int i = 0; i < L; ++i)
{
int indice = ind[tata][i];
if ( !used[indice] )
{
used[indice] = true;
int fiu = varf(indice, tata);
ciclu_euler(fiu);
}
}
sol[++l] = tata;
//fout<<tata<<" ";
}
int main ()
{
citire();
int aux = 1;
//while ( ind[aux].size() == 0 )
// ++aux;
//ciclu_euler(aux);
//if ( l == M + 1 )
//{
// for (int i = 1; i <= M; ++i)
// fout << sol[i] << " ";
//}
//else
// fout << -1;
conex(1);
for(int i=1;i<=N;i++)
if(viz[i]==false || ind[i].size()%2==1){
aux=0;
//fout<<i<<" "<<viz[i]<<"\n";
}
if(aux==0)
fout<<"-1";
else{
ciclu_euler(1);
for(int i=1;i<l;i++)
fout<<sol[i]<<" ";
}
fin.close();
fout.close();
return 0;
}