Cod sursa(job #964000)

Utilizator alinaelenaFMI Colceag Alina alinaelena Data 19 iunie 2013 21:06:30
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <cstdio>
#include <vector>
#include <stack>
#include <algorithm>
#define dim 100001
 
using namespace std;
  
int n,m,x,y; 
vector<int> graf[dim];
stack<int> stiva;
  
void erasemuchie(int x, int y)
{
	 for(vector<int>::iterator it=graf[x].begin();it!=graf[x].end();++it)
        if(*it==y)
        {
            graf[x].erase(it);
            return ;
        }
}
  
void solve()
{
    
     
    while(!stiva.empty())
    {
        int nod=stiva.top();
        if(graf[nod].size())
        {
            int nod2=graf[nod].back();
            graf[nod].pop_back();
           erasemuchie(nod2, nod);
            stiva.push(nod2);
        }
        else
        {
            printf("%d ",nod);
			stiva.pop();
        }
    }
}

int gradpar()
{
	for (int i=1;i<=n;++i)
		if (graf[i].size()%2) return 0;
	return 1;
}
  
int main()
{
	freopen("ciclueuler.in","r",stdin);
	freopen("ciclueuler.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(int i=1;i<=m;++i)
    {
        scanf("%d %d",&x,&y);
        graf[x].push_back(y);
		graf[y].push_back(x);
    }
	
	if (gradpar())
		{stiva.push(1);solve();}
	else
		printf("-1");
       
   
}