Pagini recente » Cod sursa (job #2824341) | Cod sursa (job #2404519) | Cod sursa (job #996200) | Cod sursa (job #3250917) | Cod sursa (job #2928456)
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
#define MAXN 100000
#define MAXM 500000
struct muchii{
int nod, nrap;
};
vector <muchii> graf[MAXN];
int nrmuchii[MAXN], out[MAXM];
int cautare(int node, int w){
int mi, ma, mij;
mi = 0;
ma = graf[node].size();
while((ma - mi) > 1){
mij = (mi + ma) / 2;
if(w < graf[node][mij].nod){
ma = mij;
}else{
mi = mij;
}
}
return mi;
}
void stergere(int node, int w){
int cautat;
graf[node][graf[node].size() - 1].nrap--;
if(graf[node][graf[node].size() - 1].nrap == 0){
graf[node].pop_back();
}
cautat = cautare(w, node);
graf[w][cautat].nrap--;
}
void euler(int node, int &ind){
int w;
while(!graf[node].empty()){
w = graf[node][graf[node].size() - 1].nod;
if(0 < graf[node][graf[node].size() - 1].nrap){
stergere(node, w);
euler(w, ind);
}else{
graf[node].pop_back();
}
}
out[ind] = node;
ind++;
}
bool cmp(muchii a, muchii b){
if(a.nod < b.nod){
return true;
}else{
return false;
}
}
int main()
{
FILE *fin, *fout;
int n, m, i, j, a, b, f, ind;
fin = fopen("ciclueuler.in", "r");
fscanf(fin, "%d%d", &n, &m);
for(i = 0; i < m; i++){
fscanf(fin, "%d%d", &a, &b);
graf[a - 1].push_back({b - 1, 1});
graf[b - 1].push_back({a - 1, 1});
nrmuchii[a - 1]++;
nrmuchii[b - 1]++;
}
fclose(fin);
f = 0;
for(i = 0; i < n; i++){
if((nrmuchii[i] % 2) == 1){
f = -1;
}
sort(graf[i].begin(), graf[i].begin() + graf[i].size(), cmp);
ind = 0;
for(j = 1; j < graf[i].size(); j++){
if(graf[i][j].nod != graf[i][j - 1].nod){
graf[i][ind].nod = graf[i][j - 1].nod;
ind++;
graf[i][ind].nrap = 1;
}else{
graf[i][ind].nrap++;
}
}
graf[i][ind].nod = graf[i][j - 1].nod;
ind++;
while(ind < graf[i].size()){
graf[i].pop_back();
}
}
fout = fopen("ciclueuler.out", "w");
if(f == -1){
fprintf(fout, "-1");
}else{
ind = 0;
euler(0, ind);
for(ind = ind - 1; 0 < ind; ind--){
fprintf(fout, "%d ", out[ind] + 1);
}
}
fclose(fout);
return 0;
}