Pagini recente » Cod sursa (job #2768745) | Cod sursa (job #2692899) | Cod sursa (job #1042252) | Cod sursa (job #804418) | Cod sursa (job #2158382)
/*
Un graf neorientat are un ciclu eulerian daca si numai daca:
- este conex
- toate varfurile sale au grad par
*/
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");
const int NMAX = 100001;
vector <pair < int, int > > Muchii[NMAX];
int folosit[NMAX],solutie[NMAX],contor,n;
void DFS(int nod) {
for(unsigned i=0; i<Muchii[nod].size(); i++) {
int vecin = Muchii[nod][i].first;
int poz = Muchii[nod][i].second;
if(!folosit[poz]) {
folosit[poz]++;
DFS(vecin);
}
}
solutie[contor++]=nod;
}
int main()
{
int m,x,y;
fin>>n>>m;
for(int i=1; i<=m; i++) {
fin>>x>>y;
Muchii[x].push_back(make_pair(y,i));
Muchii[y].push_back(make_pair(x,i));
}
for(int i=1; i<=n; i++)
if(Muchii[i].size() % 2) {
fout<<-1;
return 0;
}
DFS(1);
for(int i=contor-1; i>=1; --i) fout<<solutie[i]<<' ';
return 0;
}