Pagini recente » Cod sursa (job #3250900) | Cod sursa (job #1620324) | Cod sursa (job #1726777) | Cod sursa (job #2850306) | Cod sursa (job #2646927)
#include <bits/stdc++.h>
#define NMAX 100009
#define MMAX 500009
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
//prima varianta
vector<int> sol;
struct tip{ int x; int nr;};
vector<tip> g[NMAX];
int n,m;
bool uz[MMAX];///pt muc
bool fol[NMAX];
void citire();
void euler(int k);
void afisare();
bool check();
bool check1();
int main()
{citire();
if(check())
{euler(1);
if(check1())
afisare();
else
fout<<-1;
}
else
fout<<-1;
return 0;
}
void citire()
{
int i;
fin>>n>>m;
int x,y;
for(i=1;i<=m;i++)
{fin>>x>>y;
g[x].push_back({y,i});
g[y].push_back({x,i});
}
}
bool check()
{
int i;
for(i=1;i<=n;i++)
if( g[i].size()%2)
break;
return i==n+1;
}
bool check1()
{
int i;
for(i=1;i<=n;i++)
if(!fol[i])
break;
return i==n+1;
}
void euler(int k)
{
fol[k]=1;
int i;
for(i=0;i<g[k].size();i++)
{
int vec=g[k][i].x;
int care=g[k][i].nr;
if(!uz[care])
{
uz[care]=1;
euler(vec);
}
}
sol.push_back(k);
}
void afisare()
{int i;
for (i=0;i<sol.size()-1;i++)
fout<<sol[i]<<" ";
fout<<'\n';
}