Pagini recente » Cod sursa (job #543402) | Cod sursa (job #937718) | Cod sursa (job #2736960) | Cod sursa (job #38559) | Cod sursa (job #930888)
Cod sursa(job #930888)
#include <fstream>
#include <vector>
#define NMAX 100005
#define pb push_back
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector <int> v[NMAX];
int n,m,m2;
bool viz[NMAX];
void dfs_verif(int nod);
void read();
bool verif();
void euler(int nod);
void tipar();
int main()
{
read();
// tipar();
if(verif())
{
fout<<-1;
return 0;
}
//fout<<1;
euler(1);
}
void read()
{
fin>>n>>m;
int a,b;
for(int i=1;i<=m;i++)
{
fin>>a>>b;
v[a].pb(b);
v[b].pb(a);
}
m=v[1].size()/2;
}
bool verif()
{
for(int i=1;i<=n;i++)
if(v[i].size() % 2 )
return 1;
dfs_verif(1);
for(int i=1;i<=n;i++)
if(viz[i] == false)
return 1;
}
void dfs_verif(int nod)
{
viz[nod] = true;
for(int i=0;i<v[nod].size();i++)
{
if(viz[v[nod][i]] == false)
dfs_verif(v[nod][i]);
}
}
void euler(int nod)
{
int next;
while(v[nod].size())
{
next = v[nod][0];
v[nod][0] = v[nod][v[nod].size() - 1];
v[nod].pop_back();
for(int i=0;i<v[next].size();i++)
{
if(v[next][i] == nod)
{
v[next][i] = v[next][v[next].size() - 1];
v[next].pop_back();
break;
}
}
//fout<<"NOD : "<<nod<<"\n";
// tipar();
euler(next);
}
if(nod == 1)
{
if(m)
fout<<nod<<" ";
m--;
}
else
fout<<nod<<" ";
// fout<<"NOD : "<<nod<<"\n";
}
void tipar()
{
fout<<"DEBUG : \n\n";
for(int i=1;i<=n;i++)
{
for(int j=0;j<v[i].size();j++)
fout<<v[i][j] << " ";
fout<<"\n";
}
}