Pagini recente » Cod sursa (job #360751) | Cod sursa (job #827148) | Cod sursa (job #1097382) | Cod sursa (job #2180288) | Cod sursa (job #1133970)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
#define maxn 100005
vector <pair <int,int> > muchii[maxn];
queue <int> saferoad;
bool b[maxn];
int n,m,i,x,y,sz,to,where,now;
void conexdfs(int now)
{
b[now]=true;
int i,to;
for (i=0;i<muchii[now].size();i++)
{
to=muchii[now][i].first;
if (b[to]==false)
conexdfs(to);
}
}
ofstream g("ciclueuler.out");
void go(int now)
{
while (muchii[now].back().first==-1)
muchii[now].pop_back();
if (muchii[now].size()==0)
return;
to=muchii[now].back().first;
where=muchii[now].back().second;
muchii[to][where].first=-1;
muchii[now].back().first=-1;
g<<to<<' ';
go(to);
}
int main(void)
{
FILE * f;
f=fopen("ciclueuler.in","r");
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=m;i++)
{
fscanf(f,"%d%d",&x,&y);
muchii[x].push_back(make_pair(y,muchii[y].size()));
muchii[y].push_back(make_pair(x,muchii[x].size()-1));
}
conexdfs(1);
for (i=1;i<=n;i++)
if ((b[i]==false)||(muchii[i].size()==0)||(muchii[i].size()%2==1))
{
g<<"-1\n";
return 0;
}
saferoad.push(1);
sz=muchii[1].size();
saferoad.push(muchii[1][sz-1].first);
to=muchii[1][sz-1].first;
where=muchii[1][sz-1].second;
muchii[to][where].first=-1;
//cout<<"Marked muchii["<<to<<"]["<<where<<"]\n";
muchii[1][sz-1].first=-1;
//cout<<"Marked muchii["<<1<<"]["<<sz-1<<"]\n";
while (saferoad.back()!=1)
{
now=saferoad.back();
while (muchii[now].back().first==-1)
{
//cout<<"Popped from "<<now<<" : "<<muchii[now][muchii[now].size()-1].first<<' '<<muchii[now][muchii[now].size()-1].second<<'\n';
muchii[now].pop_back();
}
sz=muchii[now].size();
to=muchii[now][sz-1].first;
where=muchii[now][sz-1].second;
muchii[now][sz-1].first=-1;
//cout<<"Marked muchii["<<now<<"]["<<sz-1<<"]\n";
muchii[to][where].first=-1;
//cout<<"Marked muchii["<<to<<"]["<<where<<"]\n";
saferoad.push(to);
}
while (saferoad.size()!=1)
{
now=saferoad.front();
g<<now<<' ';
go(now);
saferoad.pop();
}
return 0;
}