Pagini recente » Cod sursa (job #295833) | Cod sursa (job #838276) | Cod sursa (job #757198) | Cod sursa (job #1356694) | Cod sursa (job #2290405)
#include <fstream>
#include <vector>
#include <unordered_map>
using namespace std;
ifstream cin ("ciclueuler.in");
ofstream cout ("ciclueuler.out");
int viz[100003],rez[1000003],n,m,grad[100003],k;
unordered_map <int,int> ok;
vector <int> v[100003];
void citire()
{
cin>>n>>m;
int i;
for(i=1;i<=m;++i)
{
int a,b;
cin>>a>>b;
++grad[b];
++grad[a];
++ok[a*(n+1)+b];
++ok[b*(n+1)+a];
v[a].push_back(b);
v[b].push_back(a);
}
}
void dfs (int poz)
{
viz[poz]=1;
for(int i=0;i<v[poz].size();++i)
{
int nn=v[poz][i];
if(!viz[nn])
dfs(nn);
}
}
bool verif ()
{
int i,cnt=0;
for(i=1;i<=n;++i)
if(grad[i]%2)
return false;
for(i=1;i<=n;++i)
{
if(!viz[i])
{
dfs(i);
++cnt;
}
}
if(cnt!=1)
return false;
return true;
}
void euler (int poz)
{
for(int i=0;i<v[poz].size();++i)
{
int nn=v[poz][i];
if(!ok[poz*(n+1)+nn])
continue;
ok[poz*(n+1)+nn]--;
ok[nn*(n+1)+poz]--;
euler(nn);
}
rez[++k]=poz;
}
int main()
{
citire();
if(verif()==0)
cout<<-1;
else
euler(1);
for(int i=1;i<k;++i)
cout<<rez[i]<<' ';
return 0;
}