Pagini recente » Cod sursa (job #1943866) | Cod sursa (job #690299)
Cod sursa(job #690299)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#define MAXN 100003
#define MAXM 500003
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct much {
int urm;
int coresp;
};
int n,m,i,j,a,b,nod,urm;
vector<much> graf[MAXN];
vector<int> st,rezultat; //STIVA
much maux;
void citire() {
fin>>n>>m;
for(i=0;i<m;i++) {
fin>>a>>b;
maux.urm=b;
maux.coresp=graf[b].size();
graf[a].push_back(maux);
maux.urm=a;
maux.coresp=graf[a].size()-1;
graf[b].push_back(maux);
}
}
bool verif() {
for(i=1;i<=n;i++) {
if (graf[i].size()%2!=0) return false;
if ( (nod==0) && (graf[i].size()!=0) ) nod=i;
}
return true;
}
void rez() {
st.push_back(nod);
while (!st.empty()) {
nod=st.back();
//cout<<nod;
i=graf[nod].size()-1;
while ((graf[nod][i].urm==0) && (i>=0)) {
graf[nod].pop_back();
i--;
}
//cout<<" -> ?"<<graf[nod][i].urm;
if (i<0) {
rezultat.push_back(nod);
st.pop_back();
//cout<<" (NU) i="<<i;
}
else {
urm=graf[nod][i].urm;
if (graf[urm].size()>graf[nod][i].coresp) {
graf[urm][graf[nod][i].coresp].urm=0;
}
graf[nod].pop_back();
st.push_back(urm);
//cout<<" (DA)";
}
//cout<<"\n";
}
}
int main() {
citire();
if (verif()) {
rez();
for(i=rezultat.size()-1;i>0;i--) {
fout<<rezultat[i]<<" ";
}
fout<<"\n";
}
else {fout<<"-1\n";}
fout.close();
return 0;
}