Pagini recente » Cod sursa (job #1424817) | Cod sursa (job #964178) | Cod sursa (job #2294119) | Cod sursa (job #2687815) | Cod sursa (job #1917531)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
#define NMAX 100005
#define DIM 100000
using namespace std;
vector<int> V[NMAX], C;
stack<int> S;
char buff[DIM];
int N, M, nodStart, poz = DIM - 1;
void citire();
bool conditieGradPar();
void dfsIterativ(int nod);
void getNumber(int &x) {
x = 0;
while(buff[poz] < '0' || buff[poz] > '9')
if(++poz == DIM) fread(buff, 1, DIM, stdin), poz = 0;
while('0' <= buff[poz] && buff[poz] <= '9') {
x = x * 10 + (buff[poz] - '0');
if(++poz == DIM) fread(buff, 1, DIM, stdin), poz = 0;
}
}
int main()
{
freopen("ciclueuler.in", "rt", stdin);
freopen("ciclueuler.out", "wt", stdout);
citire();
if(conditieGradPar()==0) printf("-1\n");
else dfsIterativ(nodStart);
}
void citire()
{
int u,v;
getNumber(N);
getNumber(M);
for(int i=1; i<=M; i++){
getNumber(u);
getNumber(v);
V[u].push_back(v);
V[v].push_back(u);
}
}
bool conditieGradPar()
{
for(int i=1; i<=N; i++)
if(V[i].size() % 2 == 1)
return 0;
else if(!nodStart)
nodStart = i;
return 1;
}
void dfsIterativ(int nod)
{
int nodStiva, vecin;
S.push(nod);
while(!S.empty()) {
nodStiva=S.top();
if( V[nodStiva].size() ){
vecin=V[nodStiva].back();
V[nodStiva].pop_back();
V[vecin].erase( find(V[vecin].begin(), V[vecin].end(), nodStiva) );
S.push(vecin);
}
else{
S.pop();
if(S.empty() == false) printf("%d ", nodStiva);
}
}
printf("\n");
}