Cod sursa(job #2384773)

Utilizator ApetriiRaduApetrii Radu ApetriiRadu Data 21 martie 2019 10:16:45
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

list<int> graf[NMAX];
vector<int>sol;
int n,m,nr;

void citire();
void dfs(int x);
void mutare();
int main()
{int i;
 citire();
 for(i=1;i<=n;i++)
    if(graf[i].size()%2==1)
      {fout<<-1<<'\n';
       exit(0);
      }
 dfs(1);
 for(i=0;i<sol.size()-1;i++)
    fout<<sol[i]<<' ';
 return 0;
}
void citire()
{int i,x,y;
 fin>>n>>m;
 for(i=1;i<=m;i++)
    {fin>>x>>y;
     graf[x].push_back(y);
     graf[y].push_back(x);
    }
}
void dfs(int x)
{int vf;
 while(!graf[x].empty())
      {vf=graf[x].front();
       graf[x].pop_front();
       //graf[vf].remove(x);
       graf[vf].erase(find(graf[vf].begin(),graf[vf].end(),x));
       dfs(vf);
      }
 sol.push_back(x);
}
/*void mutare()
{int i,j,k=1;
 if(!lgc)
    for(i=1;i<=lg;i++)
       ciclu[++lgc]=acum[i];
    else
      {for(i=1;ciclu[i]!=acum[1];i++);
       for(j=lgc;j>i;j--)
          ciclu[j+lg]=ciclu[j];
       for(j=i;j<=i+lg;j++)
          {ciclu[j]=acum[k];
           k++;
          }
       lgc+=lg;
       for(i=1;i<=lg;i++)
          acum[i]=0;
       lg=0;
      }
}*/