Cod sursa(job #1333253)

Utilizator vladvaldezVlad Dimulescu vladvaldez Data 2 februarie 2015 22:36:47
Problema Ciclu Eulerian Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <stdio.h>
#include <vector>

using namespace std;
FILE *f=fopen("ciclueuler.in","r");
FILE *g=fopen("ciclueuler.out","w");

vector <int> a[100025];
vector <int> c;
int m,n,i,x,y,ok;

void fleury()
{
vector <int>::iterator it;
vector <int>::iterator itt;
int i,x0,k=0,ck=0,cop,t=0,p=0,aux,j;
x0=1;
c.push_back(1);
i=0;
while(i!=m){
    if (i>0)
      {
         ck=0;
        for(it=a[x0].begin();it!=a[x0].end();++it)
         {
          if (*it==t){p=ck;break;}
          ck++;
         }
      a[x0].erase(a[x0].begin()+p);
      }
    cop=i;
    t=x0;
    k=0;
  for(it=a[x0].begin();it!=a[x0].end();++it){
    if(a[*it].size()-1>0){i++;c.push_back(*it);aux=*it;a[x0].erase(a[x0].begin()+k);x0=aux;break;}
    k++;
  }
 if(i==cop) for(it=a[x0].begin();it!=a[x0].end();++it){i++;c.push_back(*it);x0=*it;break;}
 if(i==cop) break;
}

for(j=0;j<=i-1;j++)
fprintf(g,"%d ",c[j]);
}


int main()
{
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d",&x,&y);
a[x].push_back(y);
a[y].push_back(x);
}
for(i=2;i<=n;i++)
if (a[i].size()%2==1){ok=1;break;}

if (ok==1)(fprintf(g,"%d",-1));
else fleury();


fclose(g);
return 0;
}