Cod sursa(job #1870599)

Utilizator mihai.alphamihai craciun mihai.alpha Data 6 februarie 2017 19:28:27
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <stack>
using namespace std;

vector<int> v[100200];
stack<int>lista;

int ciclu[500200];
//STL !!!!!!!!!!!!!!!!!!!!!!
FILE *fin, *fout;
int main()  {
    FILE *fin = fopen("ciclueuler.in", "r");
    FILE *fout = fopen("ciclueuler.out", "w");
    int n, m;
    long long rez = 0;
    fscanf(fin, "%d%d", &n, &m);
    int i, nod1, nod2;
    for(i=0;i < m;i++)  {
        fscanf(fin, "%d%d", &nod1, &nod2);
        v[nod1].push_back(nod2);
        v[nod2].push_back(nod1);
    }
    int imp=0;
    for(i = 0;i < n;i++)  {
        if(v[i].size() % 2)  {
            imp=1;
            break;
        }
    }
    if(imp)  {
        fprintf(fout, "-1");
    }
    else  {
        lista.push(1);
        while(lista.empty() == 0)  {
            nod1 = lista.top();
            if(!v[nod1].empty())  {
                nod2=v[nod1].back();
                v[nod1].pop_back();
                v[nod2].erase(find(v[nod2].begin(),v[nod2].end(),nod1));
                lista.push(nod2);
            }
            else  {
                ciclu[rez]=nod1;
                ++rez;
                lista.pop();
            }
        }
        for(i=0;i < rez-1;i++)
            fprintf(fout, "%lld ", ciclu[i]);
    }
    return 0;
    fclose(fin);
    fclose(fout);
}