Pagini recente » Cod sursa (job #1778228) | Cod sursa (job #1677008) | Cod sursa (job #1768733) | Cod sursa (job #1197715) | Cod sursa (job #1876378)
#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];
vector<int> C;
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;
}
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;
}
C.push_back(1);
while (!C.empty())
{
int nod = C.back();
while (!V[nod].empty() && V[nod].back().viz)
V[nod].pop_back();
if (!V[nod].empty())
{
V[nod].back().viz = 1;
V[V[nod].back().nod][V[nod].back().poz].viz = 1;
C.push_back(V[nod].back().nod);
V[nod].pop_back();
}
else
{
C.pop_back();
if (!C.empty())
g<<nod<<' ';
}
}
return 0;
}