Pagini recente » Cod sursa (job #1278219) | Cod sursa (job #127919) | Cod sursa (job #2143772) | Cod sursa (job #698030) | Cod sursa (job #308554)
Cod sursa(job #308554)
#include<stdio.h>
#include<vector>
#define N 100005
#define M 500008
using namespace std;
int n,m,d[N],c[M],nr=0;
vector<int> a[N],poz[N];
void citire()
{
int i,m,x,y;
scanf("%d%d",&n,&m);
for(i=1 ; i<=m ; ++i)
{
scanf("%d%d",&x,&y);
a[x].push_back(y);
if(x!=y)
{
a[y].push_back(x);
poz[x].push_back(a[y].size()-1);
poz[y].push_back(a[x].size()-1);
}
}
}
void afisareproba()
{
for(int i=1;i<=n;i++)
{
for(int j=0;j<a[i].size();j++)
printf("(%d, poz=%d) ",a[i][j],poz[i][j]);
printf("\n");
}
}
void afisare()
{
for(int i=1;i<nr;i++)
printf("%d ",c[i]);
}
void euler(int x)
{
int i,j,y,nx=a[x].size();
for(i=0;i<nx;i++)
if(a[x][i])
{
y=a[x][i];
a[x][i]=0;
if(x!=y)
{
j=poz[x][i];
a[y][j]=0;
}
euler(y);
}
c[++nr]=x;
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
euler(1);
if(nr==m+1)
afisare();
else
printf("-1");
//afisareproba();
return 0;
}