Pagini recente » Cod sursa (job #3246604) | Cod sursa (job #1249231) | Cod sursa (job #2906524) | Cod sursa (job #31217) | Cod sursa (job #2642327)
#include <stdio.h>
#include <vector>
#include <stack>
#define NMAX 100005
#define MMAX 500005
using namespace std;
FILE *fin = fopen("ciclueuler.in", "r");
FILE *fout = fopen("ciclueuler.out", "w");
vector <int> g[NMAX];
stack <int> stiva;
struct muchie {int inc; int sf;} arc[MMAX];
int n,m,i,lat,nod,x,y;
bool ok,viz[MMAX];
int main()
{
fscanf(fin, "%d%d", &n,&m);
for(i=1; i<=m; ++i)
{
fscanf(fin, "%d%d", &x,&y);
g[x].push_back(i);
g[y].push_back(i);
arc[i].inc = x;
arc[i].sf = y;
}
ok = true;
for(i=1; i<=n; ++i)
if(!g[i].empty() and g[i].size()%2)
ok = false;
if(!ok)
fprintf(fout, "-1");
else
{
stiva.push(1);
while(!stiva.empty())
{
nod = stiva.top();
if(g[nod].size())
{
lat = g[nod].back();
g[nod].pop_back();
if(!viz[lat])
{
if(nod == arc[lat].inc)
stiva.push(arc[lat].sf);
else
stiva.push(arc[lat].inc);
viz[lat] = true;
}
else ;
}
else
{
fprintf(fout, "%d ", nod);
stiva.pop();
}
}
}
fclose(fin);
fclose(fout);
return 0;
}