Cod sursa(job #640521)

Utilizator bacilaBacila Emilian bacila Data 25 noiembrie 2011 22:22:18
Problema Ciclu Eulerian Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <list>
#include<stack>
#include <fstream>
#include <iostream>
using namespace std;
ofstream g("ciclueuler.out");
list<int> v[100005];
stack<int> stk;
list<int>::iterator it;
int n,m,x,y,c[100005],next;
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 ()
{int i;
    ifstream f("ciclueuler.in");
f>>n>>m;
for(i=1;i<=m;i++)
{f>>x>>y;
                   v[x].push_back(y);
v[y].push_back(x);}
for(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(it=v[x].begin();it!=v[x].end();it++)
if(*it==1) {v[x].erase(it); break;}
stk.push(x);
while(!stk.empty())
{   
 while(!v[stk.top()].empty())
         {next=v[stk.top()].front();
                       v[stk.top()].pop_front();
                      
                      for( it=v[next].begin();it!=v[next].end();++it)
                                 if(*it==stk.top()) {v[next].erase(it); break;}
                                 
                                
                                 stk.push(next);
                                 
                                 }
     g<<stk.top()<<" ";  
     stk.pop();
     }
 }

 


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