Pagini recente » Cod sursa (job #2471758) | Cod sursa (job #2428140) | Cod sursa (job #2490985) | Cod sursa (job #2235791) | Cod sursa (job #1649099)
#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=G[varf].begin();i<G[varf].end();i++) {
if (i == last)
G[varf].erase(i);
}*/
for (vector<int>::iterator 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<<"\t";
}
else {
int last = G[varf].back();
G[varf].pop_back();
stergeMuchia(last, varf);
st.push(last);
}
}
return 0;
}