Cod sursa(job #726339)

Utilizator hunter_ionutzzzFarcas Ionut hunter_ionutzzz Data 27 martie 2012 10:21:32
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct nod{int val;
           nod *next;
}*v[100005];
int n,m,grad[100005],nr;
stack<int> st;
inline void adauga(int a, int b)
{nod *q;
    q = new nod;
    q -> val = b;
    q -> next = v[a];
    v[a] = q;
    ++grad[a];
}
int main()
{int i,a,b;
 nod *q;
    fin >> n >> m;
    for(i=1;i<=m;++i)
    {   fin >> a >> b;
        adauga(a,b);
        adauga(b,a);
    }
    for(i=1;i<=n;++i)
        if(grad[i]%2)
        {   fout << -1 <<'\n';
            return 0;
        }
    st.push(1);
    while(!st.empty())
    {   i = st.top();
        if (!v[i])
        {   st.pop();
            ++nr;
            if (nr<=m) 
				fout << i <<' ';
        }
        else
        {   a = v[i] -> val;
            v[i] = v[i] -> next;
            st.push(a);
            q = v[a];
            if (q -> val == i) 
				v[a] = v[a] -> next;
            else
            {   while (q -> next -> val != i) 
					q = q -> next;
                q->next = q -> next -> next;
            }
        }
    }
    fout << '\n';
    return 0;
}