Pagini recente » Cod sursa (job #3232736) | Cod sursa (job #1307096) | Cod sursa (job #2116160) | Cod sursa (job #579411) | Cod sursa (job #2561975)
#include <iostream>
#include <vector>
#include <stack>
#define NMAX 100000
#define MMAX 500000
using namespace std;
struct muchie {
int to ;
int ind ;
};
int viz [ MMAX + 1 ] ;
vector <muchie> g [ NMAX + 1 ] ;
stack <int> st ;
int euler [ MMAX + 1 ] ;
int main() {
FILE *fin, *fout ;
fin = fopen ("ciclueuler.in", "r") ;
fout = fopen("ciclueuler.out", "w" ) ;
int n, m, u, u2, i, e, ok, nod ;
muchie elem ;
fscanf (fin, "%d%d", &n, &m ) ;
for (i = 0 ; i < m ; i++ ) {
fscanf (fin, "%d%d", &u, &u2 ) ;
g[u].push_back({u2, i}) ;
g[u2].push_back({u, i}) ;
}
ok = 0 ;
for (i = 1 ; i <= n ; i++ ) {
if (g[i].size() % 2 != 0 )
ok = 1 ;
}
if (ok == 1 )
fprintf (fout, "-1" ) ;
else {
st.push(1) ;
e = 0 ;
while (!st.empty()) {
nod = st.top() ;
if (g[nod].size() > 0 ) {
elem = g[nod].back() ;
g[nod].pop_back() ;
if (viz[elem.ind] == 0 ) {
viz[elem.ind] = 1 ;
st.push(elem.to) ;
}
}
else {
euler[e++] = st.top() ;
st.pop() ;
}
}
for (i = 0 ; i < e-1 ; i++ )
fprintf (fout, "%d ", euler[i] ) ;
}
return 0;
}