Cod sursa(job #640492)

Utilizator bacilaBacila Emilian bacila Data 25 noiembrie 2011 21:35:09
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <list>
#include <fstream>
using namespace std;
ofstream g("ciclueuler.out");
list<int> v[100003];
int n,m,x,y,c[100003];
void dfs(int nod)
{
     int next;
list<int>::iterator it;
     while(!v[nod].empty())
         {next=v[nod].front();
                       v[nod].pop_front();
                       for( it=v[next].begin();it!=v[next].end();it++)
                                 if(*it==nod) {v[next].erase(it); break;}
                                 dfs(next);
                                 
                                 }
     g<<nod<<" ";                  
     }
void dfss(int nod)
{c[nod]=1; x++;
list<int>::iterator it;
    for( it=v[nod].begin();it!=v[nod].end();it++)
    if(!c[*it])
    dfss(*it);
    }
int main ()
{ifstream f("ciclueuler.in");
f>>n>>m;
while(f>>x>>y)
{v[x].push_back(y);
v[y].push_back(x);}
for(int i=1;i<=n;i++)
if(v[i].size()%2){ g<<-1; return 0;}
x=0;
dfss(1);
if(x!=n)           g<<-1;
else
{x=v[1].front();
                       v[1].pop_front();
                       for(list<int>::iterator it=v[x].begin();it!=v[x].end();it++)
                                 if(*it==1) {v[x].erase(it); break;}
                                 dfs(x); }

 


 f.close(); g.close();
return 0;
}