Pagini recente » Cod sursa (job #2251710) | Cod sursa (job #1166594) | Cod sursa (job #1589602) | Cod sursa (job #675285) | Cod sursa (job #1916471)
#include <fstream>
#include <vector>
#include <cstdlib>
#define NMAX 100005
using namespace std;
const char inname[] = "ciclueuler.in";
const char outname[] = "ciclueuler.out";
ifstream fin(inname);
ofstream fout(outname);
struct liste{
vector<int> vecini;
vector<int> folosit;
};
liste L[NMAX];
void citire();
void ceuler(int);
int i, ct, ordine[NMAX], viz[NMAX], n, m;
int main(){
citire();
ct = 1;
ceuler(1);
fout << "-1\n";
fin.close();
fout.close();
return 0;
}
void citire(){
int i, x, y;
fin >> n >> m;
for(i=1; i<=m; i++){
fin >> x >> y;
if(x == y){
L[x].vecini.push_back(x);
L[x].folosit.push_back(0);
}
else{
L[x].vecini.push_back(y);
L[y].vecini.push_back(x);
L[x].folosit.push_back(0);
L[y].folosit.push_back(0);
}
}
}
void ceuler(int x){
int i, j;
ordine[ct] = x;
ct++;
if(ct == m+1){
for(i=1; i<=m; i++)
fout << ordine[i] << ' ';
fout << '\n';
fin.close();
fout.close();
exit(0);
}
for(i=0; i<L[x].vecini.size(); i++){
if(L[x].folosit[i] == 0){
L[x].folosit[i] = 1;
for(j=0; j<L[L[x].vecini[i]].vecini.size(); j++)
if(L[L[x].vecini[i]].vecini[j] == x){
L[L[x].vecini[i]].folosit[j] = 1;
break;
}
ceuler(L[x].vecini[i]);
}
}
ct--;
}