Pagini recente » Cod sursa (job #994191) | Cod sursa (job #1798388) | Cod sursa (job #1644029) | Cod sursa (job #1789381) | Cod sursa (job #1918437)
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std ;
const int NMAX = 500005 ;
ifstream fin("ciclueuler.in") ;
ofstream fout("ciclueuler.out") ;
vector <int> V[NMAX];
stack <int> S;
int N, M, U[NMAX];
inline void Euler()
{
S.push(1) ;
while(!S.empty())
{
int nod = S.top() ;
if(V[nod].size())
{
int nod_nou = V[nod].back() ;
V[nod].pop_back();
V[nod_nou].erase(find(V[nod_nou].begin(), V[nod_nou].end(), nod)) ;
S.push(nod_nou) ;
}
else
{
fout << nod << ' ' ;
S.pop() ;
}
}
}
int main()
{
fin >> N >> M ;
for(int i = 1 ; i <= M ; ++ i)
{
int x, y ;
fin >> x >> y ;
V[x].push_back(y) ;
V[y].push_back(x) ;
U[x] ++ ; ///U[x] - gradul nodului x
U[y] ++ ;
}
for(int i = 1 ; i <= N ; ++ i)
if(!V[i].size() || U[i] % 2 == 1)
{
fout << "-1\n" ;
return 0 ;
}
Euler() ;
fin.close() ;
fout.close() ;
return 0 ;
}