Pagini recente » Cod sursa (job #1762296) | Cod sursa (job #1424369) | Cod sursa (job #254019) | Cod sursa (job #2750433) | Cod sursa (job #2471398)
///implementare iterativa O(n)
#include <fstream>
#include <vector>
using namespace std;
vector < pair<int,int> > v[100005];
int n,m,i,OK,x,y,p,r,vecin,poz,afis[500005],c[500005];
int main()
{
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
///cand legam un ciclu, scoatem noduri pana ajungem la unul care mai are muchii
///libere ,iar din muchiile alea incepem alt ciclu.
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
v[x].push_back(make_pair(y,v[y].size()));
v[y].push_back(make_pair(x,v[x].size()-1));
}
for(i=1;i<=n;i++)
if(v[i].size()%2==1 || v[i].size()==0)
OK=1;
if(OK==1)
g<<-1;
else
{
p=1; c[1]=1;
while(p)
{
if(v[c[p]].size())
{
vecin=v[c[p]][0].first;
poz=v[c[p]][0].second;
v[c[p]][0]=v[c[p]][v[c[p]].size()-1];
v[c[p]].pop_back();
v[vecin][poz]=v[vecin][v[vecin].size()-1];
v[vecin].pop_back();
c[++p]=vecin;
}
else
{
afis[++r]=c[p];
p--;
}
}
}
for(i=r;i>=2;i--)
g<<afis[i]<<' ';
return 0;
}