Cod sursa(job #2218161)

Utilizator mihailarminia1234Arminia Mihail mihailarminia1234 Data 3 iulie 2018 14:54:05
Problema Ciclu Eulerian Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.39 kb
#include <stdio.h>
#include <stdlib.h>

int n, m, a[10000][10000], grad[10000], i;

void euler(int nod)
{
        int i, w;
        while (grad[nod] > 0)
        {
                for (i = 1; i <= n; ++i)
                {
                        if(a[nod][i] == 1)
                        {
                                w = i;
                                a[nod][i] = 0;
                                a[i][nod] = 0;
                                --grad[nod];
                                --grad[i];
                                break;
                        }
                }
                euler (w);
        }
        printf ("%d ", nod);
}

int main()
{
        FILE *f, *g;
        f = fopen ("ciclueuler.in", "r");
        g = fopen ("ciclueuler.out", "w");

        fscanf (f, "%d %d", &n, &m);

        for (i = 1; i <= m; ++i)
        {
                int x, y;
                fscanf (f, "%d %d", &x, &y);
                a[x][y] = 1;
                a[y][x] = 1;
                ++grad[x];
                ++grad[y];
        }

        for (i = 1; i <= n; ++i)
                if (grad[i] & 1)
                {
                        printf ("-1");
                        return 0;
                }

        euler (1);

        printf ("\b");
        printf (" ");

        fclose (f);
        fclose (g);

        return 0;
}