Pagini recente » Cod sursa (job #1483154) | Cod sursa (job #1313618) | Cod sursa (job #2025581) | Cod sursa (job #1485246) | Cod sursa (job #2074572)
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
#define DN 100001
#define DM 500001
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector <int> v[DN];
stack <int> r,s;
struct vizitat{
bool vz;
int st;
int dr;} viz[DM];
/*
void dfs(int i)
{
while(v[i].size())
{
int a=v[i].back();
if(viz[a].vz==0)
{
viz[a].vz=1;
v[i].pop_back();
if(i==viz[a].st)
dfs(viz[a].dr);
else dfs(viz[a].st);
}
else v[i].pop_back();
}
r.push(i);
}
*/
void dfs(int i)
{
s.push(i);
while(!s.empty())
{
int top=s.top();
if(v[top].size())
{
int a=v[top].back();
if(viz[a].vz==0)
{
viz[a].vz=1;
v[top].pop_back();
if(top==viz[a].st)
s.push(viz[a].dr);
else s.push(viz[a].st);
}
else v[top].pop_back();
}
else
{
r.push(top);
s.pop();
}
}
}
int main()
{
int n,m,a,b;
bool ok=1;
f>>n>>m;
for(int i=1;i<=m;i++)
{
f>>a>>b;
v[a].push_back(i);
v[b].push_back(i);
viz[i].st=a;
viz[i].dr=b;
}
for(int i=1;i<=n;i++)
if(v[i].size()%2==1)
{
ok=0;
break;
}
if(ok==1)
{
int e_conex=1;
dfs(1);
for(int i=1;i<=n;i++)
if(v[i].size())
{
e_conex=0;
break;
}
if(e_conex==1)
while(!r.empty())
{
g<<r.top()<<" ";
r.pop();
}
else g<<-1;
}
else g<<-1;
return 0;
}