Cod sursa(job #2375259)

Utilizator pinbuAdi Giri pinbu Data 7 martie 2019 23:39:00
Problema Ciclu Eulerian Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
#define N 100001
using namespace std;

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

vector<int> v[N],sol;
stack<int> s;
int n;

void sterge_muchie(int a,int b)
{
    int i;
    for(i=0;i<v[a].size();i++)
        if(v[a][i]==b)
            v[a].erase(v[a].begin()+i);
    for(i=0;i<v[b].size();i++)
        if(v[b][i]==a)
            v[b].erase(v[b].begin()+i);
}

void euler(int nod)
{
    int u,vf,i;
    bool ok;
    s.push(nod);
    
    while(!s.empty())
    {
        u=s.top();
        ok=true;
        
        if(v[u].size()!=0)
        {
            vf=v[u][0];
            sterge_muchie(u,vf);
            s.push(vf);
        }
        else
        {
            s.pop();
            sol.push_back(u);
        }
    }
}

int main()
{
    int i,a,b,m;
    
    fin>>n>>m;
    
    while(fin>>a>>b)
    {
        v[a].push_back(b);
        v[b].push_back(a);
    }
    
    euler(1);
    
    if(sol.size()!=m+1)
        fout<<-1;
    else
    for(i=0;i<sol.size()-1;i++)            
        fout<<sol[i]<<" ";
    return 0;
}