Pagini recente » Cod sursa (job #1766893) | Cod sursa (job #2240276) | Cod sursa (job #227384) | Cod sursa (job #574635) | Cod sursa (job #633365)
Cod sursa(job #633365)
#include<fstream>
#include<vector>
#include<stack>
using namespace std;
vector <int> v[100100],sol,d;
stack <int> s;
bool viz[100100];
int n;
int find_graf(int vecin,int nod) {
int i;
for(i=0;i<v[vecin].size();i++)
if(v[vecin][i]==nod)
return i;
return 0;
}
void BFS() {
unsigned int i,j,nod,vecin;
for(i=0;i<d.size();i++) {
nod=d[i];
for(j=0;j<v[nod].size();j++) {
vecin=v[nod][j];
if(!viz[vecin]) {
viz[vecin]=1;
d.push_back(vecin);
}
}
}
}
bool valid() {
int i;
for(i=1;i<n;i++)
if(v[i].size()%2) return 0;
d.push_back(1);
viz[1]=1;
BFS();
for(i=1;i<=n;i++)
if(!viz[i]) return 0;
return 1;
}
void afis(int ans) {
ofstream out("ciclueuler.out");
if(ans==-1)
out<<"-1";
else
for(unsigned int i=1;i<sol.size();out<<sol[i++]<<" ");
out<<'\n';
out.close();
}
void DFS() {
int nod,vecin;
while(!s.empty()) {
nod=s.top();
if(v[nod].size()) {
vecin=v[nod][0];
s.push(vecin);
v[vecin].erase(v[vecin].begin()+find_graf(vecin,nod));
v[nod].erase(v[nod].begin());
}
else sol.push_back(nod),s.pop();
}
}
void citire() {
int i,x,y,m;
ifstream in("ciclueuler.in");
in>>n>>m;
for(i=0;i<m;i++) {
in>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
in.close();
}
int main() {
citire();
if(valid()) {
s.push(1);
DFS();
afis(1);
}
else afis(-1);
return 0;
}