Cod sursa(job #2151961)

Utilizator albucristianAlbu Cristian-Gabriel albucristian Data 5 martie 2018 09:12:25
Problema Ciclu Eulerian Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <fstream>
using namespace std;
int ma[10002][10002],cicluu[200002],ma1[10002][10002],viz[10002];
int nr,n,m,a,b,ok;
void ciclu(int nod)
{
    viz[nod]=1;
    for(int i=1;i<=n;i++)
    {
        if(ma[nod][i])
        {
            ma[nod][i]--;
            ma[i][nod]--;
            ciclu(i);
        }
    }
    cicluu[++nr]=nod;
}
int main()
{
    ifstream in("ciclueuler.in");
    ofstream out("ciclueuler.out");
    in>>n>>m;
    for(int i=1;i<=m;i++)
    {
        in>>a>>b;
        ma[a][b]++;
        ma[b][a]++;
    }
    for(int i=1;i<=n;i++)
    {
        ciclu(i);
        ok=1;
        for(int j=1;j<=n;j++)
        {
            if(!viz[i])
            {
                ok=0;
                break;
            }
        }
        for(int j=1;j<=n;j++)
        {
            for(int jj=1;jj<=n;jj++)
            {
                if(ma[j][jj]==1)
                {
                    ok=0;
                    break;
                }
            }
        }
        if(cicluu[1]==cicluu[nr]&&ok)
            break;
        else
        {
            nr=0;
            for(int j=1;j<=n;j++)
            {
                for(int jj=1;jj<=n;jj++)
                {
                    ma[j][jj]=ma1[j][jj];
                }
                viz[j]=0;
            }
        }
    }
    if(cicluu[1]!=cicluu[nr])
        nr=-1;
    for(int i=nr;i>1;i--)
    {
        out<<cicluu[i]<<" ";
    }
    return 0;
}