Pagini recente » Cod sursa (job #522059) | Arhiva de probleme | Cod sursa (job #2683224) | Cod sursa (job #653846) | Cod sursa (job #954787)
Cod sursa(job #954787)
#include <fstream>
#include <vector>
#include <iostream>
#include <list>
#define MAX 100001
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector < int > E[MAX],solution;
list < int > stack;
int n,m,mark[MAX],x,y;
void read()
{
f>>n>>m;
for(int i=0;i<m;i++)
{
f>>x>>y;
E[x].push_back(y);
E[y].push_back(x);
}
}
void print()
{
for(int i=0;i<solution.size();i++)
g<<solution[i]<<' ';
}
int euler()
{
int i;
for(i=1;i<=n;i++)
if((E[i].size())%2==1) return 0;
return 1;
}
void solve()
{
int i,j,node,k=1;
if(!euler()) g<<-1;
else
{
stack.push_back(1);
while(!stack.empty())
{
node=stack.front();
if(!E[node].empty())
{
x=E[node][0];
stack.push_front(x);
E[node][0]=E[node][E[node].size()-1];
E[node].pop_back();
for(i=0;i<E[x].size();i++)
if(E[x][i]==node)
{
E[x][i]=E[x][E[x].size()-1];
E[x].pop_back();
break;
}
}
else {
if(k<=m) {solution.push_back(node); k++;}
stack.pop_front();
}
}
}
}
int main()
{
read();
solve();
print();
}