Cod sursa(job #1379772)

Utilizator Arodoet96Teodora Stoleru Arodoet96 Data 6 martie 2015 19:23:07
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <cstdio>
#include <vector>
#define DMAX 100004

using namespace std;

FILE*fin=fopen("ciclueuler.in", "r");
FILE*fout=fopen("ciclueuler.out", "w");

int n, m;
struct nod
{
    vector <int> vecin;
    vector <int> muchie;
}
Nod[DMAX];
bool uzm[5*DMAX];
int C[5*DMAX], nrm;

void citire();
void euler();
void ciclu(int);
void afisare();

int main()
{
    citire();
    euler();
    return 0;
}

void citire()
{
    int i, x, y;
    fscanf(fin, "%d %d", &n, &m);
    for(i=1;i<=m;++i)
    {
        fscanf(fin, "%d %d", &x, &y);
        Nod[x].vecin.push_back(y); Nod[x].muchie.push_back(i);
        Nod[y].vecin.push_back(x); Nod[y].muchie.push_back(i);
    }
}

void euler()
{
    int i;
    ciclu(1);
    if(C[1]!=1)
    {
        fprintf(fout, "-1\n");
        return;
    }
    afisare();
}

void ciclu(int k)
{
    int i, lg;
    lg=Nod[k].muchie.size();
    for(i=0;i<lg;++i)
        if(!uzm[Nod[k].muchie[i]])
        {
            uzm[Nod[k].muchie[i]]=1;
            ciclu(Nod[k].vecin[i]);
        }
    C[++nrm]=k;
}

void afisare()
{
    int i;
    for(i=1;i<nrm;++i)
        fprintf(fout, "%d ", C[i]);
    fprintf(fout, "\n");
}