Cod sursa(job #2035588)

Utilizator CodrinsahCotarlan Codrin Codrinsah Data 9 octombrie 2017 17:29:38
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.84 kb
#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];
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;
    muchie[i].nod1=x;
    muchie[i].nod2=y;
    v[x].push_back(i);
    v[y].push_back(i);

  }
}
int main()
{
  citire();
  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;
}