Cod sursa(job #2384685)

Utilizator RazvanPanaiteRazvan Panaite RazvanPanaite Data 21 martie 2019 09:13:16
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>
#define DMAX 100010

using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

struct nume{
     int node,id;
     nume(int node,int id){
         this->node=node;
         this->id=id;
    }
};

vector <nume> V[DMAX];
vector <int> sol;
bool uz[DMAX];

int n;

void citire();
void euler(int node);

int main()
{int i;
 citire();
 for(i=1;i<=n;i++)
     if(V[i].size()%2)
        {fout<<"-1\n";
         return 0;
        }
 euler(1);
 for(i=0;i<sol.size()-1;i++)
     fout<<sol[i]<<' ';
 fout<<'\n';
 return 0;
}
void citire()
{int i,m,x,y;
 fin>>n>>m;
 for(i=1;i<=m;i++)
     {fin>>x>>y;
      V[x].push_back(nume(y,i));
      V[y].push_back(nume(x,i));
     }
}
void euler(int node)
{while(!V[node].empty())
       {nume edge=V[node].back();
        V[node].pop_back();
        if(!uz[edge.id])
           {uz[edge.id]=true;
            euler(edge.node);
           }
       }
 sol.push_back(node);
}