Cod sursa(job #1903496)

Utilizator CriistinaMicula Cristina Criistina Data 5 martie 2017 11:51:32
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <vector>
#define Nmax 100001

using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

int n,m;
int sol[Nmax], nr;
vector <int> gr[Nmax];

vector <int> :: iterator find_poz(int x, int y)
{
    for(vector <int> :: iterator i=gr[y].begin();i!=gr[y].end();i++)
    {
        if(*i==x)
            return i;
    }
}
void euler(int x)
{
    while(gr[x].size()!=0)
    {
        int y=gr[x].back();
        gr[x].pop_back();
        gr[y].erase(find_poz(x, y));
        euler(y);
    }
    sol[++nr]=x;
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        f>>x>>y;
        gr[x].push_back(y);
        gr[y].push_back(x);
    }
    for(int i=1;i<=n;i++)
    {
        if(gr[i].size()%2==1)
        {
            g<<-1;
            return 0;
        }
    }
    euler(1);
    for(int i=1;i<nr;i++)
    {
        g<<sol[i]<<" ";
    }
    if(nr==m)
        g<<sol[nr];
    return 0;
}