Pagini recente » Cod sursa (job #1748992) | Cod sursa (job #2271469) | Cod sursa (job #1593424) | Cod sursa (job #852130) | Cod sursa (job #726339)
Cod sursa(job #726339)
#include <fstream>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct nod{int val;
nod *next;
}*v[100005];
int n,m,grad[100005],nr;
stack<int> st;
inline void adauga(int a, int b)
{nod *q;
q = new nod;
q -> val = b;
q -> next = v[a];
v[a] = q;
++grad[a];
}
int main()
{int i,a,b;
nod *q;
fin >> n >> m;
for(i=1;i<=m;++i)
{ fin >> a >> b;
adauga(a,b);
adauga(b,a);
}
for(i=1;i<=n;++i)
if(grad[i]%2)
{ fout << -1 <<'\n';
return 0;
}
st.push(1);
while(!st.empty())
{ i = st.top();
if (!v[i])
{ st.pop();
++nr;
if (nr<=m)
fout << i <<' ';
}
else
{ a = v[i] -> val;
v[i] = v[i] -> next;
st.push(a);
q = v[a];
if (q -> val == i)
v[a] = v[a] -> next;
else
{ while (q -> next -> val != i)
q = q -> next;
q->next = q -> next -> next;
}
}
}
fout << '\n';
return 0;
}