Cod sursa(job #442143)

Utilizator MoninaManolache Monica Monina Data 13 aprilie 2010 22:05:19
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
#include <iostream.h>
int n,m,i,j,a[30][30],x,y,viz[30],p=0,v[30];

void citire()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    scanf("%d %d",&n,&m);
    int i, x, y;
    for (i = 1; i <= m; i++)
    {
        scanf("%d %d",&x,&y);
        a[x][y] = a[y][x] = 1;
    }
}
void df_euler(int nod)
{
 int i;viz[nod]=1;
 v[p]=nod;
 p++;
 for (i=1;i<=n;i++)
     if (a[nod][i])
        if (!viz[i])
           {
            a[nod][i]=0;
            a[i][nod]=0;
            df_euler(i);                        
           }    
 for (i=1;i<=n;i++)
     if (a[nod][i])
        {
         a[nod][i]=0;
         a[i][nod]=0;
         df_euler(i);           
        }
}
int grad(int x)
{
int  grad=0,i,j;
    for (i=1;i<=n;i++)
        {
         grad+=a[i][x];            
        }
 return grad;   
}
int main()
{
 citire();
 int ok=1;
 for (i=1;i<=n;i++)
     if (grad(i)%2!=0) ok=0;
 memset(viz,0,sizeof (viz));
 df_euler(1);  
 if (ok==0) printf("-1");
 else
     for (i=0;i<p;i++)
         printf("%d ",v[i]);
 system("pause");   
 return 0;   
}