Pagini recente » Cod sursa (job #43767) | Cod sursa (job #522837) | Cod sursa (job #1935515) | Cod sursa (job #351634) | Cod sursa (job #1649276)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
vector<int> G[100002];
stack<int> st;
int viz[100002];
int n,m,i,j,x,y, grad;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
void parc_adancime(int plecare) {
viz[plecare] = 1;
int i;
for (i=0;i<G[plecare].size();i++)
if (viz[G[plecare][i]] == 0)
parc_adancime(G[plecare][i]);
}
void stergeMuchia(int varf, int last) {
int i;
for (i=0;i<G[varf].size();i++) {
if (G[varf][i] == last)
G[varf].erase(G[varf].begin()+i);
}
/*
vector<int>::iterator it;
for (it = G[varf].begin(); it != G[varf].end(); it++)
if (*it == last)
{
G[varf].erase(it);
return;
}
*/
}
int main()
{
f>>n>>m;
for (i=1;i<=m;i++) {
f>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
parc_adancime(1);
for (i=1;i<=n;i++) {
grad = G[i].size();
if (viz[i]==0 || grad % 2 !=0)
g<<-1;
}
st.push(1);//adaug elementu 1 in stiva
while ( !st.empty() ) {
int varf = st.top();//Varf stiva
int gradVarf = G[varf].size();
if (gradVarf == 0) {
st.pop();
if ( !st.empty() )
g<<varf<<" ";
}
else {
int last = G[varf].back();
G[varf].pop_back();
stergeMuchia(last, varf);
st.push(last);
}
}
return 0;
}