Cod sursa(job #1149991)

Utilizator dumytruKana Banana dumytru Data 22 martie 2014 14:48:14
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <stack>

using namespace std;

vector<vector<int> > graf;
stack<int>q;
int n,m;

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

void euler ()
{
    int v,w;
    while(!q.empty())
    {
        v = q.top();
        if(!graf[v].size())
        {
            g<<v<<' ';
            q.pop();
        }
        else
        {
            w = *graf[v].begin();

            graf[v].erase(graf[v].begin());
            graf[w].erase(find(graf[w].begin(), graf[w].end(), v));

            q.push(w);
        }
    }

}
int main()
{
    int i,u,v;
    unsigned isEuler=1;
    f>>n>>m;
    graf.resize(n+1);
    for(i=1;i<=m;i++)
    {
        f>>u>>v;
        graf[u].push_back(v);
        graf[v].push_back(u);
    }

    for(i=1;i<=n;i++)
        if(graf[i].size()&1){
            isEuler=0;break;
    }


    q.push(1);
    if(isEuler)euler();
    else g<<-1;
    return 0;
}