Pagini recente » Cod sursa (job #2245599) | Cod sursa (job #1386221) | Cod sursa (job #901423) | Cod sursa (job #3230560) | Cod sursa (job #951437)
Cod sursa(job #951437)
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
#define Nmax 100010
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int N, M, X, Y;
vector<int> G[Nmax];
stack<int> S;
void stergere(int nod, int nr)
{
for(vector<int>::iterator it = G[nod].begin(); it != G[nod].end(); ++ it)
if(*it == nr)
{
G[nod].erase(it);
return ;
}
}
void Euler(int nod)
{
S.push(nod);
while(!S.empty())
{
int nod = S.top();
if(G[nod].size())
{
int nr = G[nod].back();
G[nod].pop_back();
stergere(nr, nod);
S.push(nr);
}
else
{
fout<<nod<<" ";
S.pop();
}
}
}
int main()
{
int i;
fin>>N>>M;
for(i = 1; i <= M; ++ i)
{
fin>>X>>Y;
G[X].push_back(Y);
G[Y].push_back(X);
}
for(i = 1; i <= N; ++ i)
if(G[i].size() % 2)
{
fout<<"-1";
return 0;
}
Euler(1);
return 0;
}