Cod sursa(job #1845844)

Utilizator AcuasPopescu Nicolae-Aurelian Acuas Data 11 ianuarie 2017 21:58:10
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#define NMAX 100005
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n,m,muchii;
vector<int> G[NMAX];
stack<int> st;
void elim(int v,int nod){
    int i;
    for(i=0;i<G[v].size();++i)
    if(G[v][i]==nod){
        G[v].erase(G[v].begin()+i);
        return ;
    }
}
int main(){
    f>>n>>m;
    int i,x,y;
    for(i=1;i<=m;++i){
        f>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    for(i=1;i<=n;++i)
    if(G[i].size()%2!=0){
        g<<-1<<'\n';
        return 0;
    }
    st.push(1);
    while(!st.empty()){
        int nod=st.top();
        if(G[nod].size()==0){
            ++muchii;
            g<<nod<<' ';
            st.pop();
            if(muchii>=m)
                break;
        }
        else{
            int v=G[nod].back();
            G[nod].pop_back();
            elim(v,nod);
            st.push(v);
        }
    }
    return 0;
}