Cod sursa(job #2509392)

Utilizator ana_maria_zotaZota Ana Maria ana_maria_zota Data 14 decembrie 2019 10:44:35
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

vector<int>graf[100010];
stack<int>stiva;

struct muc{
    int viz,x,y;
}muchie[500010];

int n,m,x1,y1,grad[100010],nr;

int gradul()
{
    for(int i=1;i<=n;i++)
       {
        if(grad[i]%2!=0)
            return 0;
       }
       return 1;
}


 void eulerian(int x)
 {
     stiva.push(1);
     while(!stiva.empty())
     {
         int nod=stiva.top();
         if(graf[nod].size()==0)
         {
             stiva.pop();
             if(!stiva.empty())
                 fout<<nod<<" ";
                 continue;

         }
         int ultim=graf[nod].back();
         int from=muchie[ultim].x;
         int to=muchie[ultim].y;
         graf[nod].pop_back();
         if(muchie[ultim].viz==1)
             continue;
         if(nod!=from)
            swap(from,to);
         stiva.push(to);
         muchie[ultim].viz=1;
     }

 }

int main()
{
     fin>>n>>m;
     for(int c=1;c<=m;c++)
     {
        fin>>x1>>y1;
        graf[x1].push_back(c);
        graf[y1].push_back(c);
        grad[x1]++;
        grad[y1]++;
        muchie[c].x=x1;
        muchie[c].y=y1;
        muchie[c].viz=0;
     }
     if(gradul()==1)
     {
        eulerian(1);
     }
     else
        fout<<-1;
    return 0;
}