Pagini recente » Cod sursa (job #282719) | Cod sursa (job #2447775) | Cod sursa (job #415678) | Cod sursa (job #1807285) | Cod sursa (job #2874850)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector <int> v[100011],back_edge[100011],to_edge[100011];
bool fost[100011];
void dfs(int k)
{
fost[k]=1;
while(v[k].empty()==false)
{
auto it=v[k].begin();
int p=*it;
v[k].erase(it);
auto it1=find(v[p].begin(),v[p].end(),k);
v[p].erase(it1);
if(fost[p]==1)
{
back_edge[k].push_back(p);
back_edge[p].push_back(k);
}
else
{
to_edge[k].push_back(p);
to_edge[p].push_back(k);
dfs(p);
}
}
}
vector <int> sol;
int n,m,i,nod,stop,tata,muc,x,y,j;
int main()
{
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
for(i=1;i<=n;i++)
if(v[i].size()%2==1)
{
g<<-1;
return 0;
}
dfs(1);
nod=stop=1;
tata=muc=0;
while(stop)
{
g<<nod<<" ";
stop=0;
if(muc==0)
{
auto it=find(back_edge[nod].begin(),back_edge[nod].end(),tata);
if(it!=back_edge[nod].end())
back_edge[nod].erase(it);
}
else
{
auto it=find(to_edge[nod].begin(),to_edge[nod].end(),tata);
if(it!=to_edge[nod].end())
to_edge[nod].erase(it);
}
if(back_edge[nod].size()>0)
{
tata=nod;
nod=back_edge[nod].back();
back_edge[tata].pop_back();
muc=0;
stop=1;
}
else
if(to_edge[nod].size()>0)
{
tata=nod;
nod=to_edge[nod].back();
to_edge[tata].pop_back();
muc=1;
stop=1;
}
}
return 0;
}