Pagini recente » Cod sursa (job #495835) | Cod sursa (job #742859) | Cod sursa (job #3321005) | Borderou de evaluare (job #2657860) | Cod sursa (job #1897702)
#include<stdio.h>
#include<vector>
using namespace std;
FILE *in, *out;
const int MAXN = 100006;
const int MMAX = 500005;
vector <int> g[MAXN];
int lup[MAXN], n, m;
bool viz[MAXN];
struct mu
{
int a, b;
};
mu chii[MMAX];
int poz = 0, tota = 0;
int iese[MMAX];
void afis()
{
for(int i = 0; i < poz - 1; i++) {
fprintf(out, "%d ", iese[i]);
}
}
void euler(int nod)
{
/*
while(!g[nod].empty() && viz[g[nod].back()]) {
g[nod].pop_back();
}
for(auto &it : g[nod]) {
if(!viz[it]) {
viz[it] = true;
tota++;
if(chii[it].a == nod) {
euler(chii[it].b);
} else {
euler(chii[it].a);
}
}
}
*/
while(!g[nod].empty()) {
if(!viz[g[nod].back()]) {
viz[g[nod].back()] = true;
tota++;
if(chii[g[nod].back()].a == nod) {
euler(chii[g[nod].back()].b);
} else {
euler(chii[g[nod].back()].a);
}
}
while(!g[nod].empty() && viz[g[nod].back()]) {
g[nod].pop_back();
}
}
//fprintf(out, "%d ", nod);
iese[poz++] = nod;
while(lup[nod] > 0) {
//fprintf(out, "%d ", nod);
iese[poz++] = nod;
lup[nod]--;
tota++;
}
return;
}
int main ()
{
in = fopen("ciclueuler.in", "r");
out = fopen("ciclueuler.out", "w");
fscanf(in, "%d%d", &n, &m);
for(int i = 0; i < m; i++) {
//int x, y;
fscanf(in, "%d%d", &chii[i].a, &chii[i].b);
viz[i] = false;
if(chii[i].a != chii[i].b) {
g[chii[i].a].push_back(i);
g[chii[i].b].push_back(i);
} else {
lup[chii[i].a]++;
}
}
bool ciuciu = false;
for(int i = 1; i <= n; i++) {
if((g[i].size() % 2 == 1)) {
ciuciu = true;
}
}
if(ciuciu) {
fprintf(out, "-1");
} else {
int nod = 1;
while(g[nod].size() == 0) {
nod++;
}
euler(nod);
if(tota == m) {
afis();
} else {
fprintf(out, "-1");
}
}
fclose(in);
fclose(out);
return 0;
}