Pagini recente » Cod sursa (job #1966233) | Cod sursa (job #2166165) | Cod sursa (job #882577) | Cod sursa (job #2228293) | Cod sursa (job #950097)
Cod sursa(job #950097)
#include<iostream>
#include<fstream>
#include<vector>
#include<stack>
#define NMAX 100010
using namespace std;
vector<int> v[NMAX];
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
void citeste(int &nr_noduri, int &nr_muchii){
int i, x, y;
fin>>nr_noduri>>nr_muchii;
for(i=0;i<nr_muchii;++i){
fin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
}
int esteEulerian(int &nr_noduri){
int grad, i;
for(i=0; i<nr_noduri; ++i){
grad = v[i].size();
if(grad%2!=0)
return 0;
}
return 1;
}
void determinaCiclu(int &nr_noduri){
stack<int> stiva;
vector<int>::iterator it;
int varf, urm_varf;
stiva.push(1);
do{
varf = stiva.top();
stiva.pop();
while(!v[varf].empty()){
urm_varf = v[varf].back();
v[varf].pop_back();
for(it=v[urm_varf].begin(); it != v[urm_varf].end();++it){
if(*it == varf)
{
*it = *(v[urm_varf].end()-1);
v[urm_varf].pop_back();
break;
}
}
stiva.push(varf);
varf = urm_varf;
}
if(!stiva.empty())
fout<<stiva.top()<<" ";
}while(!stiva.empty());
}
int main(){
int nr_muchii, nr_noduri;
citeste(nr_noduri, nr_muchii);
if(esteEulerian(nr_noduri)){
determinaCiclu(nr_noduri);
}
else
fout<<"-1";
return 0;
}