Cod sursa(job #1059529)

Utilizator sebinechitasebi nechita sebinechita Data 16 decembrie 2013 19:23:25
Problema Parcurgere DFS - componente conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
//nu ii frumos sa te uiti pe sursele altora:))...hotule....nu o sti face singur?:))
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

#define MAX 100020

vector <int> G[MAX];
stack <int> stiva;
int viz[MAX], arc[MAX], i, n;


bool eulerian()
{
    for(i=1;i<=n;i++)
    {
        if(arc[i]%2==1)
            return 0;
    }
    return 1;
}

void sterge(int v, int w)
{
    arc[v]--;
    arc[w]--;
    G[v].erase(G[v].begin());
    for(vector <int> ::iterator it=G[w].begin();it!=G[w].end();it++)
    {
        if(*it==v)
        {
            G[w].erase(it);
            break;
        }
    }

}

int main()
{
    int m, a, b, v, w;
    fin>>n>>m;
    while(m--)
    {
        fin>>a>>b;
        G[a].push_back(b);
        G[b].push_back(a);
        arc[a]++;
        arc[b]++;
    }

    if(!eulerian())
    {
        fout<<"-1\n";
        return 0;
    }

    stiva.push(1);
    while(!stiva.empty())
    {
        v=stiva.top();
        fout<<v<<" ";
        stiva.pop();
        while(arc[v])
        {
            w=G[v][0];
            stiva.push(v);
            sterge(v, w);
            v=w;
        }

    }

}