Cod sursa(job #1367548)

Utilizator traian.vidrascutraian vidrascu traian.vidrascu Data 1 martie 2015 22:41:45
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");

struct muc
{
    int p;
    int k;
};
muc aux;
vector <muc> gr[100005];
int n,m,viz[500005],d[500005],viz2[500005],nod,l,ok=-1;
void dfs(int x)
{
    int i,j;

    for(i=0;i<gr[x].size() && ok==-1;i++)
    {

        if(gr[x][i].p==nod && viz2[gr[x][i].k]==0)
            {
            for(j=1;j<=l;j++)
                g<<d[j]<<" ";
            ok=1;
            break;
            }
        if(viz2[gr[x][i].k]==0 && viz[gr[x][i].p]==0 && ok==-1)
            {
                viz2[gr[x][i].k]=1;
                l++;
                d[l]=gr[x][i].p;
                dfs(gr[x][i].p);
                d[l]=0;
                l--;
            }
    }

}
int main()
{
    int i,j,x,y;
    f>>n>>m;
    for(i=1;i<=m;i++)
        {
            f>>x>>y;
            aux.p=y;
            aux.k=i;
            gr[x].push_back(aux);
            aux.p=x;
            gr[y].push_back(aux);
        }
   for(i=1;i<=n && ok==-1;i++)
        if(viz[i]==0)
        {
            viz[i]=1;
            nod=i;
            l++;
            d[1]=nod;
            dfs(i);
        }
    if(ok==-1)
        g<<ok;
    return 0;
}