Pagini recente » Cod sursa (job #2380806) | Cod sursa (job #3125548) | Cod sursa (job #1011252) | Cod sursa (job #2817274) | Cod sursa (job #2035592)
#include <fstream>
#include <vector>
using namespace std;
ifstream fi ("ciclueuler.in");
ofstream fo ("ciclueuler.out");
struct nod
{
int poz;
nod *urm;
nod *ant;
};
struct much
{
int nod1,nod2;
} muchie[500003];
vector <int> v[100003];
int nr,nrnod,nrmuchii;
int i[100005],fr[100005];
bool viz[500006];
nod *cap=new nod;
nod *nodcurent;
void citire()
{
int i,x,y;
fi>>nrnod>>nrmuchii;
for (i=1;i<=nrmuchii;i++)
{
fi>>x>>y;
fr[x]++;
fr[y]++;
muchie[i].nod1=x;
muchie[i].nod2=y;
v[x].push_back(i);
v[y].push_back(i);
}
}
int main()
{
citire();
for (int q=1;q<=nrnod;q++)
if (fr[q]%2==1)
{
fo<<-1;
return 0;
}
nodcurent=new nod;nodcurent -> poz=0;
cap -> poz=1;cap -> urm=nodcurent;cap -> ant=new nod;cap -> ant -> poz=0;
nodcurent -> ant=cap;
nodcurent=cap;nr=nodcurent -> poz;
for (int q=1;q<=nrnod;q++) i[q]=-1;
for (i[nr]=0;i[nr]<v[nr].size();i[nr]++)
{
if (!viz[v[nr][i[nr]]])
{
viz[v[nr][i[nr]]]=true;
int nodstart=muchie[v[nr][i[nr]]].nod1;
int nodstop=muchie[v[nr][i[nr]]].nod2;
if (nr==nodstop) swap (nodstart,nodstop);
nod *nextnod=new nod;
nextnod -> urm=nodcurent ->urm;
nextnod -> urm -> ant=nextnod;
nextnod -> ant=nodcurent;
nextnod -> poz=nodstop;
nr=nodstop;
nodcurent -> urm=nextnod;
nodcurent = nextnod;
// nodcurent -> urm=new nod;
// nodcurent -> urm -> poz=nodstop;
// nodcurent -> urm -> urm=NULL;
// nr=nodcurent -> urm -> poz;
// nodcurent=nodcurent -> urm;
}
while (i[nr]==v[nr].size()-1)
{
nodcurent=nodcurent -> ant;
if (nodcurent==NULL) break;
if (nodcurent -> poz==0) break;
nr=nodcurent -> poz;
}
}
nodcurent=cap;
while (nodcurent!=NULL)
{
if (nodcurent -> urm -> poz==0) break;
fo<<nodcurent -> poz<<' ';
nodcurent = nodcurent -> urm;
}
return 0;
}