Pagini recente » Cod sursa (job #867733) | Cod sursa (job #270396) | Cod sursa (job #162887) | Cod sursa (job #1702470) | Cod sursa (job #1290210)
#include<fstream>
#include<vector>
#define maxN 100001
#define maxM 500001
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector<int>v[maxN];
int d[maxN],t[maxN],n,m;
bool viz[maxN];
void citire()
{
int i,x,y;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
d[x]++;d[y]++;
}
}
void df(int nod)
{
viz[nod]=true;
for(int i=0;i<v[nod].size();i++)
{
if(viz[v[nod][i]]==false)
{
t[v[nod][i]]=nod;
df(v[nod][i]);
}
}
}
bool verif()
{
for(int i=1;i<=n;i++)
{
if(viz[i]==false) return false;
if(d[i]%2==1)return false;
}
return true;
}
void sterge(int a,int b)
{
for(int i=0;i<v[a].size();i++)
if(v[a][i]==b)
{
v[a].erase(v[a].begin()+i);
return;
}
}
void euler(int nod)
{
int i,nod_cur;
for(i=0;i<v[nod].size();i++)
{ if(v[nod][i]==0)continue;
if(t[v[nod][i]]!=i&&t[i]!=v[nod][i])
{
nod_cur=v[nod][i];
v[nod].erase(v[nod].begin()+i);
sterge(nod_cur,nod);
g<<nod_cur<<" ";
euler(nod_cur);
}
}
for(i=0;i<v[nod].size();i++)
{
if(v[nod][i]==0)continue;
if(t[v[nod][i]]==nod||t[nod]==v[nod][i])
{
nod_cur=v[nod][i];
v[nod].erase(v[nod].begin()+i);
sterge(nod_cur,nod);
g<<nod_cur<<" ";
euler(nod_cur);
}
}
}
int main()
{
bool ok;
citire();
df(1);
ok=verif();
if(ok==false)
{
g<<"-1 ";
}
else
{
g<<"1 ";
euler(1);
}
return 0;
}