Pagini recente » Borderou de evaluare (job #1004081) | Cod sursa (job #2539118) | Cod sursa (job #3279352) | Cod sursa (job #646156) | Cod sursa (job #1785023)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector <pair <int,int> > g[100010];
int k,ok,nr1,vc[500010],sol[500010],n,m;
ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");
void dfs (int nod, int dad)
{
int a,i,j;
if(nod==1)
nr1++;
if(nr1>=2&&k==m)
{
ok=1;
for(i=1; i<=k; i++)
fout<<sol[i]<<" ";
return;
}
a=g[nod].size();
for(j=0; j<a; j++)
{
if(vc[g[nod][j].second]==0)
{
vc[g[nod][j].second]=1;
sol[++k]=g[nod][j].first;
dfs(g[nod][j].first,nod);
}
}
if(dad!=0)
{
vc[g[nod][dad].second]=0;
k--;
}
}
int main()
{
int i,a,b;
fin>>n>>m;
for(i=1; i<=m; i++)
{
fin>>a>>b;
g[a].push_back(make_pair(b,i));
g[b].push_back(make_pair(a,i));
}
sol[1]=1;
k=1;
dfs(1,0);
if(ok==0)
fout<<"-1";
return 0;
}