Pagini recente » Cod sursa (job #2681704) | Cod sursa (job #1270560) | Cod sursa (job #3246635) | Cod sursa (job #3228706) | Cod sursa (job #2056017)
#include <fstream>
#include <iterator>
#include <vector>
#include <stack>
#include <list>
using namespace std;
ifstream fin ("ciclueuler.in");
ofstream fout("ciclueuler.out");
#define NMAX 100003
int x,y,N,M;
vector<int> v[NMAX];
stack<int> s;
list<int> l;
void Delete(int pt,int val)
{
for(vector<int>::iterator it = v[pt].begin() ; it != v[pt].end() ; ++it)
if(*it == val)
{
v[pt].erase(it);
break;
}
}
void Ciclu_Eulerian(int xp)
{
s.push(xp);
while( !s.empty() )
{
int n = s.top();
vector<int>::iterator it = v[n].begin();
if( it != v[n].end() )
{
s.push(*it);
Delete(*it,n);
v[n].erase(it);
}
else
{
l.push_back(n);
s.pop();
}
}
}
int main()
{
fin>>N>>M;
for(int i = 1 ; i <= M ; i++)
{
fin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
Ciclu_Eulerian(1);
if( l.begin() != l.end() && l.front() == l.back() )
{
l.pop_front();
while( !l.empty() )
{
fout << l.back() << ' ';
l.pop_back();
}
}
else
fout << -1;
return 0;
}