Cod sursa(job #1019445)

Utilizator vladvaldezVlad Dimulescu vladvaldez Data 31 octombrie 2013 08:56:15
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <stdio.h>
#include <vector>
#include <algorithm>


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

vector<int>l[100005],sol;
int s[500005],i,n,m,x,y,u;

int verif()
{
  int i,ok=0;
 for(i=1;i<=n;i++)

   if ((l[i].size())%2==1)ok=1;

if (ok==0)return 1;
else return 0;
}



void df(int i)
{
  int y;
 s[++u]=i;
 while(u)
 {
   x=s[u];
  if(l[x].size()!=0)
    {
      y=l[x].back();
      l[x].pop_back();
      s[++u]=y;
      l[y].erase(find(l[y].begin(),l[y].end(),x));
    }
   else
   {
     u--;
     sol.push_back(x);
   }
  }

}


int main()
{

fscanf(f,"%d%d",&n,&m);

for(i=1;i<=m;i++)
{
fscanf(f,"%d%d",&x,&y);
l[x].push_back(y);
l[y].push_back(x);
}
if (verif()==0)fprintf(g,"%d",-1);
 else
 {
 df(1);
for(i=0;i<=sol.size()-2;i++)
fprintf(g,"%d ",sol[i]);

 }



fclose(g);
return 0;
}