Pagini recente » Cod sursa (job #1978112) | Cod sursa (job #1277802) | Borderou de evaluare (job #171800) | Borderou de evaluare (job #1555793) | Cod sursa (job #2111997)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
struct data{
int edge;
bool used;
};
vector <data> v[100001];
int st[500001];
int main()
{
data z;
z.used=0;
int n,m,i,ok,x,y,vf,act;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
z.edge=y;
v[x].push_back(z);
z.edge=x;
v[y].push_back(z);
}
ok=0;
for(i=1;i<=n;i++)
{
if(v[x].size()%2==1)
ok++;
}
if(ok!=0)
{
g<<-1<<'\n';
return 0;
}
vf=1;
st[vf]=1;
while(vf>0)
{
act=st[vf];
for(i=0;i<v[act].size();i++)
if(v[act][i].used==0)
break;
if(i<v[act].size())
{
st[++vf]=v[act][i].edge;
v[act][i].used=1;
i=-1;
do{
i++;
while(v[st[vf]][i].edge!=act)
i++;
}while(v[st[vf]][i].used!=0);
v[st[vf]][i].used=1;
}
else
{
g<<act<<' ';
vf--;
}
}
return 0;
}