Pagini recente » Cod sursa (job #463020) | Cod sursa (job #2810649) | Cod sursa (job #2087438) | Cod sursa (job #2969469) | Cod sursa (job #1131817)
#include <cstdio>
#include <vector>
using namespace std;
FILE *f,*g;
vector <int> a[100100];
vector <bool> e[100100];
int gr[100100];
int n,m,i,j,x,y;
bool ok;
bool bf[100100];
vector <int> q;
int main()
{
f=fopen("ciclueuler.in","r");
g=fopen("ciclueuler.out","w");
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=m;i++)
{
fscanf(f,"%d%d",&x,&y);
a[x].push_back(y);
if (x!=y) a[y].push_back(x);
gr[x]++;
gr[y]++;
e[x].push_back(true);
if (x!=y) e[y].push_back(true);
}
ok=true;
for (i=1;i<=n;i++)
if (gr[i]%2==1)
{
ok=false;
return 0;
}
q.push_back(1);
bf[1]=true;
for (i=0;i<q.size();i++)
{
x=q[0];
for (j=0;j<a[x].size();j++)
if (bf[a[x][j]]==false)
{
bf[a[x][j]]=true;
q.push_back(a[x][j]);
}
}
for (i=1;i<=n;i++)
if (bf[i]==false)
{
ok=false;
break;
}
if (ok==false)
{
fprintf(g,"-1");
return 0;
}
ok=true;
x=1;
while (1==1)
{
if (gr[x]==0) return 0;
fprintf(g,"%d ",x);
ok=false;
gr[x]--;
for (i=0;i<a[x].size();i++)
if (gr[a[x][i]]%2==0 && e[x][i]==true)
{
y=a[x][i];
e[x][i]=false;
if (x!=y) for (j=0;j<a[y].size();j++)
if (a[y][j]==x && e[y][j]==true)
{
e[y][j]=false;
break;
}
gr[y]--;
ok=true;
x=y;
break;
}
if (ok==false)
{
for (i=0;i<a[x].size();i++)
if (gr[a[x][i]]%2==1 && e[x][i]==true)
{
y=a[x][i];
e[x][i]=false;
if (x!=y)
for (j=0;j<a[y].size();j++)
if (a[y][j]==x && e[y][j]==true)
{
e[y][j]=false;
break;
}
gr[y]--;
x=y;
ok=true;
break;
}
}
}
return 0;
}