Pagini recente » Cod sursa (job #2261005) | Cod sursa (job #1998027) | Cod sursa (job #92895) | Cod sursa (job #2359833) | Cod sursa (job #2471447)
///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],nr[100005],s[100005];
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));
nr[x]++;
nr[y]++;
}
for(i=1;i<=n;i++)
if(nr[i]%2==1 || nr[i]==0)
OK=1;
if(OK==1)
g<<-1;
else
{
p=1; c[1]=1;
while(p)
{
if(nr[c[p]])
{
for(i=s[c[p]];i<v[c[p]].size();i++)
{
s[c[p]]++;
if(v[c[p]][i].first!=0)
{
vecin=v[c[p]][i].first;
poz=v[c[p]][i].second;
v[c[p]][i].first=0;
v[vecin][poz].first=0;
nr[c[p]]--;
nr[vecin]--;
c[++p]=vecin;
break ;
}
}
}
else
{
afis[++r]=c[p];
p--;
}
}
}
for(i=r;i>=2;i--)
g<<afis[i]<<' ';
return 0;
}