Pagini recente » Cod sursa (job #2490800) | Cod sursa (job #70151) | Cod sursa (job #2092960) | Cod sursa (job #1090770) | Cod sursa (job #1615463)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector <int> G[100005];
int i, n, sn[100005], si[100005], poz, nr, c[100], u, v, m;
bool ok;
bool verif()
{
for(i=1;i<=n;i++)
if(G[i].size()%2==1)
return 0;
return 1;
}
void _erase(int a, int b)
{
G[a].erase(G[a].begin()+si[poz]);
for(i=0;i<G[b].size();i++)
{
if(G[b][i]==a)
{
G[b].erase(G[b].begin()+i);
return;
}
}
}
void euler()
{
sn[1]=1;
si[1]=0;
poz=1;
while(poz>0)
{
if(si[poz]<G[sn[poz]].size())
{
sn[poz+1]=G[sn[poz]][si[poz]];
_erase(sn[poz],G[sn[poz]][si[poz]]);
si[poz]++;
poz++;
}
else
{
fout<<sn[poz]<<" ";
poz--;
}
}
}
int main()
{
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>u>>v;
G[u].push_back(v);
G[v].push_back(u);
}
ok=verif();
if(ok)
{
euler();
}
else
fout<<-1;
return 0;
}