Cod sursa(job #1882612)

Utilizator KOzarmOvidiu Badea KOzarm Data 17 februarie 2017 12:46:50
Problema Ciclu Eulerian Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#include <vector>
#include <stack>

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

vector <int> G[100005];
stack <int> s;
int n,m,ttl;
bool viz[100005];

bool dfs1(int poz)
{
    vector <int>::iterator it;
    viz[poz]=1;
    ttl++;
    for(it=G[poz].begin();it!=G[poz].end();it++)
    if(!viz[*it])
    {
        bool ok=dfs1(*it);
        if(ok==0)
            return 0;
    }
    return 1;
}


void dfs(int i)
{
    vector <int>::iterator it,it1;
    while(m)
    {
        m--;
        i=s.top();
        it=G[i].begin();
            s.push(*it);
            int x=*it;
            G[i].erase(it);
            for(it1=G[x].begin();it1!=G[x].end();it1++)
            if(*it1==i)
            {
                G[x].erase(it1);
                break;
            }
        while(s.size()>1&&G[s.top()].size()==0)
        {
            fout<<s.top()<<" ";
            s.pop();
        }
    }
}



int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        fin>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    bool ok=dfs1(1);
    if(ttl<n||!ok)
    {
        fout<<"-1";
        return 0;
    }
    s.push(1);
    dfs(1);

    return 0;
}