Pagini recente » Cod sursa (job #1319392) | Cod sursa (job #2646496) | Cod sursa (job #697018) | Cod sursa (job #675768) | Cod sursa (job #903016)
Cod sursa(job #903016)
#include<fstream>
#include<list>
#include<stack>
using namespace std;
#define nmax 100005
long n, m, i, a, b, ac, urm, sf, nod, nraf, inc, el;
long gr[nmax], co[nmax];
bool viz[nmax], ok;
list <long> ma[nmax];
list <long> ::iterator it;
stack <long> st;
ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");
void citire()
{
fin>>n>>m;
for (i=1; i<=m; i++)
{
fin>>a>>b;
ma[a].push_back(b);
gr[a]++;
ma[b].push_back(a);
gr[b]++;
}
}
void bfs()
{
co[1]=1; inc=sf=1; viz[1]=1;
while (inc<=sf)
{
el=co[inc]; inc++;
for (it=ma[el].begin();it!=ma[el].end();it++)
if (!viz[*it])
{
viz[*it]=1;
co[++sf]=*it;
}
}
}
void verificare()
{
ok=1;
for (i=1; i<=n; i++)
ok=ok&&(viz[i])&&(gr[i]%2==0);
}
void eliminare_muchie()
{
ma[ac].erase(ma[ac].begin());
for (it=ma[urm].begin(); it!=ma[urm].end(); it++)
if (*it==ac)
{
ma[urm].erase(it);
break;
}
}
void extinde()
{
ac=nod;
while (1)
{
st.push(ac);
if (ma[ac].size()==0)
break;
urm=*ma[ac].begin();
eliminare_muchie();
ac=urm;
}
}
void rezolvare()
{
st.push(1);
while (st.size())
{
nod=st.top();
st.pop();
if (ma[nod].size())
extinde();
else
{
nraf++;
if (nraf<=m)
fout<<nod<<' ';
else
break;
}
}
}
int main()
{
citire();
bfs();
verificare();
if (!ok)
fout<<-1<<"\n";
else
rezolvare();
return 0;
}