Cod sursa(job #601583)

Utilizator vendettaSalajan Razvan vendetta Data 7 iulie 2011 00:49:33
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include<fstream>

using namespace std;

ifstream in;
ofstream out;

vector <int> gf[100001];
int i, j, n, m, gr[100001];
queue<int>c;

void euler( int nod ){
    int x;
    for (;gf[nod].size();){
        x = *gf[nod].begin();
        gf[nod].erase(gf[nod].begin());
        for(vector<int>::iterator it=gf[x].begin();it!=gf[x].end();++it)
            if (*it==nod) {
                gf[x].erase(it);
                break;
            }
        euler(x);
    }
    c.push(nod);
}

int main(){
    //freopen("ciclueuler.in","r",stdin);
    //freopen("ciclueuler.out","w",stdout);
    //scanf("%d%d",&n,&m);
    in.open("ciclueuler.in");
    out.open("ciclueuler.out");
    in>>n>>m;
    memset(gr,0,sizeof(gr));
    for (i=1;i<=m;i++){
        int x,y;
        //scanf("%d%d",&x,&y);
        in>>x>>y;
        gf[x].push_back(y);
        gf[y].push_back(x);
        gr[x]++;gr[y]++;
    }
    for (i=1;i<=n;++i)
        if (gr[i]%2){
            //printf("%c",-1);
            out<<"-1\n";
            return 0;
        }
    euler( 1 );
    c.pop();

    while (!c.empty()){
        //printf("%d ",c.front());
        out<<c.front()<<" ";
        c.pop();
    }
    return 0;

}