Cod sursa(job #2076262)

Utilizator sebistetuCucolas Sebastian sebistetu Data 26 noiembrie 2017 13:08:54
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<fstream>
#include<list>
#include<stack>
#include<deque>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int nmax = 100005;
list<int>l[nmax];
stack<int>s;
deque<int>sol;
int n, m;
bool viz[nmax];
void citire(){
    f >> n >> m;
    int x, y;
    for(int i = 1; i <= m; i++){
       f >> x >> y;
       l[x].push_back(y);
       l[y].push_back(x);
    }
}
void euler()
{
    int nod_curent, nod_urm;
    s.push(1);
    while(!s.empty()){
        nod_curent = s.top();
        if(l[nod_curent].size()){
            nod_urm = l[nod_curent].front();
            l[nod_curent].pop_front();
            list<int>::iterator it;
            for(it = l[nod_urm].begin(); *it != nod_curent; it++);
            l[nod_urm].erase(it);
            s.push(nod_urm);
        }
        else{
            sol.push_back(nod_curent);
            s.pop();
        }
    }
}
void afisare(){
    while(!sol.empty()){
        g << sol.front() << ' ';
        sol.pop_front();
    }

}
int main(){
    citire();
    euler();
    afisare();
}