Pagini recente » Cod sursa (job #792940) | Cod sursa (job #797189) | Cod sursa (job #1465633) | Cod sursa (job #2342956) | Cod sursa (job #973129)
Cod sursa(job #973129)
#include <fstream>
#include <vector>
#include <set>
#include <queue>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector<multiset<int> >g;
int m, n, x, y;
queue<int>q;
stack<int>s;
bool vis[100001];
inline bool CheckEuler()
{
q.push(1);
for(;!q.empty();q.pop())
{
int x=q.front();
for(multiset<int>::iterator it=g[x].begin(); it!=g[x].end(); it++ )
if(!vis[*it])
{
vis[*it]=1;
q.push(*it);
}
}
for(int i = 1; i<= n; i++ )
if(g[i].size()%2 || (!vis[i]&&g[i].size()) )
return 0;
return 1;
}
void Euler()
{
s.push(1);
for(;s.size();)
{
x = s.top();
if (!g[x].size())
{
fout<<x<<" ";
s.pop();
continue;
}
int y = *g[x].begin();
g[x].erase(g[x].begin());
g[y].erase(g[y].find(x));
s.push(y);
}
}
int main()
{
fin>>n>>m;
g.resize(n+1);
for(;m--;)
{
fin>>x>>y;
g[x].insert(y);
g[y].insert(x);
}
if(!CheckEuler())
fout<<-1;
else Euler();
return 0;
}