Pagini recente » Cod sursa (job #2115129) | Cod sursa (job #1294424) | Cod sursa (job #1323892) | Cod sursa (job #376239) | Cod sursa (job #1291052)
#include <fstream>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct Nod{int inf; Nod*leg;}*L[100001],*stiva,*rezultat;
typedef Nod* nod;
int grad[100001],n,m;
void add(nod &lista, int x){
nod p=new Nod;
p->inf=x;
p->leg=lista;
lista=p;
}
void sterge(nod &lista,int x)
{
nod pred=lista;
if(lista->inf==x){lista=lista->leg;delete pred;return;}
else{
for(nod q=lista->leg;q;q=q->leg){
if(q->inf==x){
pred->leg=q->leg;
delete q;
return;
}
pred=q;
}
}
}
void citire()
{
int x,y;
fin>>n>>m;
for(int i=1; i<=m; i++)
{
fin>>x>>y;
add(L[x],y);
add(L[y],x);
grad[x]++;
grad[y]++;
}
}
void afisare(nod lista)
{
for(nod q=lista;q;q=q->leg)fout<<q->inf<<" ";
}
bool verificare(){for(int i=1; i<=n; i++)if(grad[i]%2!=0)return 0; return 1;}
void euler(){
add(stiva,1);
while(stiva)
{
int pct=stiva->inf;
if(!L[pct]){sterge(stiva,stiva->inf);add(rezultat,pct);}
else{
int x=L[pct]->inf;
sterge(L[pct],x);
sterge(L[x],pct);
add(stiva,x);
}
}
}
int main()
{
citire();
if( !verificare() ) fout<<"-1"<<endl;
else {
euler();
sterge(rezultat,rezultat->inf);
afisare(rezultat);}
return 0;
}