Pagini recente » Cod sursa (job #495376) | Istoria paginii runda/trasharena_bitch/clasament | Cod sursa (job #1675676) | Cod sursa (job #1677343) | Cod sursa (job #2269026)
#include <cstdio>
#include <vector>
#include <algorithm>
#define DIMN 100001
using namespace std;
vector <pair <int,int> > v[DIMN];
int f[5*DIMN],fi[DIMN];
int q[5*DIMN];
void dfs (int nod){
int i,vecin;
f[nod]=1;
for (i=0;i<v[nod].size();i++){
vecin=v[nod][i].first;
if (!f[vecin]){
dfs (vecin);
}
}
}
int main()
{
FILE *fin=fopen ("ciclueuler.in","r");
FILE *fout=fopen ("ciclueuler.out","w");
int n,m,i,x,y,inc,nod,vecin,elem,ok;
fscanf (fin,"%d%d",&n,&m);
for (i=1;i<=m;i++){
fscanf (fin,"%d%d",&x,&y);
v[x].push_back(make_pair(y,i));
v[y].push_back(make_pair(x,i));
fi[x]++;
fi[y]++;
}
for (i=1;i<=n;i++){
if (fi[i]){
dfs(i);
inc=i;
break;
}
}
for (i=1;i<=n;i++){
if (v[i].size()%2==1 || (fi[i] && f[i]==0)){
fprintf (fout,"-1");
return 0;
}
f[i]=0;
}
q[1]=inc;
ok=0;
elem=1;
while (elem){
nod=q[elem];
if (fi[nod]==0){
// am luat toate muchiile care au legatura cu el, il afisez
if (ok){
fprintf (fout,"%d ",nod);
elem--;
continue;
}
else {
ok=1;
elem--;
continue;
}
}
while (v[nod].size() && f[v[nod].back().second]==1)
v[nod].pop_back();
vecin=v[nod].back().first;
fi[nod]--;
fi[vecin]--; // elimin muchia nod->vecin
f[v[nod].back().second]=1;
v[nod].pop_back();
q[++elem]=vecin;
}
return 0;
}