Pagini recente » Cod sursa (job #670254) | Cod sursa (job #2378786)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
struct ura
{
int nod, nrm;
} aux;
bool viz[100001], vc[100001];
int n, grad[100001], k, nr, v[100001], st[100001];
vector<ura> lista[100001];
void euler(int nod)
{
k++;
st[k] = nod;
if(viz[nod]==1)
while(grad[st[k]]==0 && k!=0)
{
++nr;
v[nr]=st[k];
--k;
}
else
viz[nod] = 1;
if(k)
for(int i = 0; i<lista[st[k]].size(); i++)
if(vc[lista[st[k]][i].nrm]==0)
{
vc[lista[st[k]][i].nrm]=1;
grad[st[k]]--;
grad[lista[st[k]][i].nod]--;
euler(lista[st[k]][i].nod);
}
}
int main()
{
int i, m, n1, n2;
bool eulerian = true;
in>>n>>m;
for(i = 1; i<=m; i++)
{
in>>n1>>n2;
++grad[n1]; ++grad[n2];
aux.nod = n2;
aux.nrm = i;
lista[n1].push_back(aux);
aux.nod = n1;
lista[n2].push_back(aux);
}
for(i = 1; i<=n; i++)
if(grad[i]%2==1)
eulerian = false;
if(eulerian)
{
euler(1);
for(i = 1; i<=nr-1; i++)
out<<v[i]<<" ";
}
else out<<-1;
return 0;
}