Cod sursa(job #1442887)

Utilizator sing_exFMIGhita Tudor sing_ex Data 26 mai 2015 15:25:25
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

int n;
vector<int> b;

void euler(vector<int> *v,int x) {
    int a;
    while (!v[x].empty()) {
        a = v[x].back();
        v[x].pop_back();
        int i;
        for (i=0;(unsigned)i<v[a].size();i++)
            if (v[a][i] == x) {
                v[a].erase(v[a].begin()+i);
                break;
            }
        euler(v,a);
        b.push_back(x);
    }
}

int main()
{
    int m,ok=0,j;
    ifstream f("ciclueuler.in");
    f>>n>>m;
    vector<int> *v = new vector<int>[n+1];
    vector<int> *v1 = new vector<int>[n+1];
    int i,x,y;
    for (i=0;i<m;i++) {
        f>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }
    f.close();
    for (i=1;i<=n;i++) v1[i] = v[i];
    for (i=1;i<=n;i++) {
        b.clear();
        euler(v,i);
        if (b[0] == b[b.size()-1]) {
            ok = 1;
            break;
        }
        for (j=1;j<=n;j++) v[i] = v1[i];
    }
    ofstream g("ciclueuler.out");
    if (ok)
        for (i=0;(unsigned)i<b.size()-1;i++) g<<b[i]<<" ";
    else g<<-1;
    g.close();
    return 0;
}