Pagini recente » Cod sursa (job #1081038) | Cod sursa (job #2727306) | Cod sursa (job #1153362) | Cod sursa (job #1373007) | Cod sursa (job #1376583)
#include <fstream>
#include<stdlib.h>
using namespace std;
int **a,n,m,**t,*v,impar,start;
ifstream f("euler.in");
ofstream g("euler.out");
void DFS(int x)
{
v[x]=1;
v[0]++;
for(int i=1;i<=a[x][0];i++)
if(!v[a[x][i]])
{
t[x][i]=1;
for(int j=1;j<=a[a[x][i]][0];j++)
if(a[a[x][i]][j]==x){
t[a[x][i]][j]=1;break;}
DFS(a[x][i]);
}
}
void euler(int x)
{
int y=-1;
for(int i=1;i<=a[x][0];i++)
if(t[x][i]==0)
{
t[x][i]=-1;
for(int j=1;j<=a[a[x][i]][0];j++)
if(a[a[x][i]][j]==x&&t[a[x][i]][j]!=-1){
t[a[x][i]][j]=-1;break;}
g<<x<<' ';
euler(a[x][i]);
return;
}
else if(t[x][i]==1)
y=i;
if(y!=-1)
{
t[x][y]=-1;
for(int j=1;j<=a[a[x][y]][0];j++)
if(a[a[x][y]][j]==x){
t[a[x][y]][j]=-1;break;}
g<<x<<' ';
euler(y);
}
}
int main()
{
f>>n>>m;
a=(int **)malloc((n+1)*sizeof(int*));
t=(int **)malloc((n+1)*sizeof(int*));
v=(int *)malloc((n+1)*sizeof(int));
v[0]=0;
for(int i=1;i<=n;i++)
{
a[i]=(int *) malloc(sizeof(int));
t[i]=(int *) malloc(sizeof(int));
a[i][0]=0;
v[i]=0;
}
int c,d;
for(int i=1;i<=m;i++)
{
f>>c>>d;
a[c][0]++;
a[c]=(int *) realloc(a[c],(a[c][0]+1)*sizeof(int));
a[c][a[c][0]]=d;
t[c]=(int *) realloc(t[c],(a[c][0]+1)*sizeof(int));
t[c][a[c][0]]=0;
a[d][0]++;
a[d]=(int *) realloc(a[d],(a[d][0]+1)*sizeof(int));
a[d][a[d][0]]=c;
t[d]=(int *) realloc(t[d],(a[d][0]+1)*sizeof(int));
t[d][a[d][0]]=0;
}
for(int i=1;i<=n;i++)
if(a[i][0]%2==1) impar++,start=i;
if(impar==0)
start=1;
else{ g<<"-1";return 0;}
DFS(1);
if(v[0]<n) { g<<"-1";return 0;}
else
euler(start);
return 0;}