Pagini recente » Cod sursa (job #2384455) | Cod sursa (job #1385048) | Cod sursa (job #2217739) | Cod sursa (job #42419) | Cod sursa (job #1922818)
#include<stdio.h>
#include<vector>
#include<stack>
//#include<algorithm>
#define N 100001
#define M 500001
using namespace std;
FILE *in, *out;
struct Graf{
int node, poz;
};
vector <Graf> v[N];
stack <int> stiv;
bool grad[N];
bool viz[M];
void euler (){
int nod, son;
stiv.push (1);
while (stiv.empty () == 0){
nod = stiv.top();
while (v[nod].empty() == 0 && viz[v[nod].back().poz] == true)
v[nod].pop_back();
if (v[nod].empty() == 0){
son = v[nod].back().node;
stiv.push(son);
viz[v[nod].back().poz] = true;// muchie viz
v[nod].pop_back();//scot fiul
}
else {
if (stiv.size() > 1)
fprintf (out,"%d ", nod);
stiv.pop();
}
}
}
int main (){
in = fopen ("ciclueuler.in","r");
out = fopen ("ciclueuler.out","w");
int n,m,i,n1,n2,pp;
fscanf (in,"%d%d",&n,&m);
for (i=1;i<=m;i++){
fscanf(in,"%d%d",&n1,&n2);
v[n1].push_back({n2,i});
v[n2].push_back({n1,i});
grad[n1] = !grad[n1]; grad[n2] = !grad[n2];
}
pp = 0;
for (i=1;i<=n && pp == 0;i++)
if (grad[i] == 1)
pp = 1;
if (pp == 1)
fprintf (out,"-1");
else
euler ();
fclose (in);
fclose (out);
return 0;
}