Cod sursa(job #1322349)

Utilizator ducu34Albastroiu Radu Gabriel ducu34 Data 19 ianuarie 2015 22:57:54
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int x,y,ajung[100001],i,OK,n,m,k,p1[10001],a[10001][10001],p[100001],aux[100001];
void dfs(int x,int r)
{
    int i=0;
    for(i=1;i<=n;i++)
    {
		if(a[x][i])
		{
			if(i==r)
			{
				OK=1;
				p1[++k]=i;
				a[x][i]=a[i][x]=0;
				ajung[x]--;
				ajung[i]--;
				return;
			}
			if(OK==0)
			{
				p1[++k]=i;
				a[x][i]=0;a[i][x]=0;
				ajung[x]--;
				ajung[i]--;
				dfs(i,r);
				if(OK==0)
				{
				a[x][i]=1;
				ajung[x]++;
				ajung[i]++;
				k--;
				}
			}
		}
    }
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
		a[x][y]=a[y][x]=1;
        ajung[x]++;ajung[y]++;
    }
    for(i=1;i<=n;i++)
    {
        if(ajung[i]%2==1)
        {
            fout<<-1;
            OK=1;
            break;
        }
    }
	p[1]=1;
    if(!OK)
    {
		for(i=1;i<=n;i++)
		{
			if(ajung[i]!=0)
			{
				x=i;
				OK=0;k=0;
				dfs(x,x);
			}
		}
    }
	for(i=1;i<=m;i++)
		fout<<p[i];
    return 0;
}