Pagini recente » Cod sursa (job #2290094) | Cod sursa (job #2170151) | Cod sursa (job #3299328) | Cod sursa (job #1434737) | Cod sursa (job #692852)
Cod sursa(job #692852)
#include<fstream>
#include<vector>
using namespace std;
int n,m,X[500500],Y[500500],sol[500500],nr;
bool viz[500500];
vector <int> G[100100];
ofstream g("ciclueuler.out");
inline void Citire()
{
int i;
ifstream f("ciclueuler.in");
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>X[i]>>Y[i];
G[X[i]].push_back(i);
G[Y[i]].push_back(i);
}
f.close();
}
inline bool Eulerian()
{
int i;
for(i=1;i<=n;i++)
if(G[i].size()%2==1)
return false;
return true;
}
inline void Euler(int nod)
{
vector <int>::iterator it;
for(it=G[nod].begin();it!=G[nod].end();it++)
{
if(!viz[*it])
{
viz[*it]=true;
Euler(X[*it]+Y[*it]-nod);
}
}
sol[++nr]=nod;
}
int main()
{
Citire();
bool ok=Eulerian();
if(!ok)
{
g<<-1<<"\n";
g.close();
return 0;
}
else
{
int i;
Euler(1);
for(i=1;i<=nr;i++)
g<<sol[i]<<' ';
g<<"\n";
g.close();
}
return 0;
}