Pagini recente » Cod sursa (job #907216) | Cod sursa (job #2664731) | Cod sursa (job #190833) | Cod sursa (job #2894184) | Cod sursa (job #726669)
Cod sursa(job #726669)
#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]) //daca nu mai are vecini
{ st.pop(); //este eliminat si afisat
++nr; // nr este numarul de muchii
if (nr <= m)
fout << i <<' ';
}
else
{ a = v[i] -> val; //se elimina cele 2 noduri
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;
}