Pagini recente » Cod sursa (job #1161504) | Cod sursa (job #1312833) | Cod sursa (job #880720) | Cod sursa (job #1118152) | Cod sursa (job #715051)
Cod sursa(job #715051)
#include <fstream>
#include <stack>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
struct node
{
int nr;
node *next;
} *v[100005];
int n,m,grad[100005],nr;
stack<int> st;
void adauga(int a, int b)
{
node *p=new node;
p->nr=b;
p->next=v[a];
v[a]=p;
++grad[a];
}
int main()
{
int i,a,b,w;
node *p;
f>>n>>m;
for(i=1;i<=m;++i)
{
f>>a>>b;
adauga(a,b);
adauga(b,a);
}
for(i=1;i<=n;++i)
if(grad[i]%2)
{
g<<-1<<'\n';
f.close(); g.close();
return 0;
}
st.push(1);
while(!st.empty())
{
i=st.top();
if(!v[i])
{
st.pop();
++nr;
if(nr<=m) g<<i<<' ';
}
else
{
w=v[i]->nr;
v[i]=v[i]->next;
st.push(w);
p=v[w];
if(p->nr==i) v[w]=v[w]->next;
else
{
while(p->next->nr!=i) p=p->next;
p->next=p->next->next;
}
}
}
g<<'\n';
f.close(); g.close();
return 0;
}