Cod sursa(job #2343141)

Utilizator HoriqHoria Pacurar Horiq Data 13 februarie 2019 18:34:45
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
#include <stack>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
const int NMAX=100000;
vector<int>v[NMAX+5];
stack <int> st;
string s[NMAX+5];
int viz[NMAX+5];
void dfs(int u)
{
    int l,j;
    viz[u]=1;
    for(j=0;j<v[u].size();j++)
    {
        l=v[u][j];
        if(viz[l]==0)
           dfs(l);
    }
}
void Eu(int node)
{
    int other;
    while(!v[node].empty())
    {
        st.push(node);
        other=v[node].back();
        v[node].pop_back();
        v[other].erase(find(v[other].begin(),v[other].end(),node));
        node=other;

    }
}
int main()
{
    int node,i,j,n,m,u,l,conex=1;
    cin>>n>>m;
    for(i=1;i<=m;i++)
    {
        cin>>u>>l;
        v[u].push_back(l);
        v[l].push_back(u);
    }
    conex=1;
    dfs(1);
    for(i=1;i<=n;i++)
        if(viz[i]==0)
    {
        conex=0;
        break;
    }
    if(conex==1)
    {
        node=1;
        do
        {
            Eu(node);
            node=st.top();
            cout<<node<<" ";
            st.pop();
        }while(!st.empty());
    }
    else
        cout<<-1;
    return 0;
}