Pagini recente » Cod sursa (job #2082042) | Cod sursa (job #197888) | Cod sursa (job #583573) | Cod sursa (job #369268) | Cod sursa (job #1876367)
#include <fstream>
#include <cstdio>
#include <vector>
#define Nmax 100001
using namespace std;
ofstream g("ciclueuler.out");
int n,nr,m,ok;
bool viz[Nmax];
struct mc{
int nod, poz;
bool viz;
};
vector<mc> V[Nmax];
void dfs(int nod)
{
viz[nod] = 1;
nr++;
for (int i=0;i<V[nod].size();i++)
if (!viz[V[nod][i].nod])
{
viz[V[nod][i].nod] = 1;
dfs(V[nod][i].nod);
}
}
bool conex()
{
dfs(1);
if (nr==n)
return 1;
return 0;
}
void euler(int nod)
{
for (int i=0;i<V[nod].size();i++)
{
if (!V[nod][i].viz)
{
V[nod][i].viz = 1;
V[V[nod][i].nod][V[nod][i].poz].viz = 1;
euler(V[nod][i].nod);
}
}
if (ok==0)
ok=1;
else
g<<nod<<' ';
}
int main()
{
freopen("ciclueuler.in","r",stdin);
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
mc crt;
crt.viz = 0;
crt.nod = y;
crt.poz = V[y].size();
if (x==y)
crt.poz++;
V[x].push_back(crt);
crt.nod = x;
crt.poz = V[x].size()-1;
V[y].push_back(crt);
}
for (int i=1;i<=n;i++)
{
if (V[i].size()%2==1)
{
g<<-1;
return 0;
}
}
if (!conex())
{
g<<-1;
return 0;
}
euler(1);
return 0;
}