Cod sursa(job #1023612)

Utilizator gabriela-ivascuIvascu Gabriela gabriela-ivascu Data 7 noiembrie 2013 13:41:13
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#define NMAX 1008
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int ma[NMAX][NMAX],grad[NMAX],n,m,i,uz[NMAX],sol[NMAX],k,v,y,nr;
void citire()
{
    int x,y;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
        grad[x]++;
        grad[y]++;
        ma[x][y]=ma[y][x]=1;
    }
}
int eulerian()
{
    for(i=1;i<=n;i++)
    {
        if(grad[i]%2!=0)
            return 0;
    }
    return 1;
}
void ciclueuler(int nod)
{
    sol[1]=nod;uz[nod]=1;
    k=1;
    while(k)
    {
        v=sol[k];y=0;
        for(i=1;i<=n;i++)
        {
            if(ma[v][i]==1 && uz[i]==0)
            {
                y=i;break;
            }
            if(y==0)
                k--;
            else
            {
                sol[++k]=y;
                uz[y]=1;
            }
        }
    }
}
void afisare()
{
    for(i=1;i<=nr;i++)
        fout<<sol[i]<<" ";
}
int main()
{
    citire();
    if(eulerian()==1)
    {
        ciclueuler(1);
        afisare();
    }
    else
        fout<<-1;

return 0;
}