Pagini recente » Cod sursa (job #2871315) | Cod sursa (job #1836209) | Cod sursa (job #1494473) | Cod sursa (job #3260457) | Cod sursa (job #396111)
Cod sursa(job #396111)
# include <fstream>
using namespace std;
int n, m, *a[100003], e[5000010], ne, gr[100003];
void add (int i, int j)
{
a[i][0]++;
a[i]=(int *)realloc (a[i], (a[i][0]+1)*4);
a[i][a[i][0]]=j;
}
void read ()
{
ifstream fin ("ciclueuler.in");
fin>>n>>m;
for (int i=1;i<=n;i++)
{
a[i]=(int *)malloc (4);
a[i][0]=0;
}
int x, y;
for (int i=1;i<=m;i++)
{
fin>>x>>y;
gr[x]++;
gr[y]++;
add(x, y);
add(y, x);
}
}
void sterge (int i, int j)
{
int p, k;
k=a[i][j];
for (p=1;p<=a[k][0] && a[k][p]!=i;k++);
a[k][p]=a[k][a[k][0]];
a[k][0]--;
a[i][j]=a[i][a[i][0]];
a[i][0]--;
}
void euler (int i)
{
for (int j=1;j<=a[i][0];j++)
{
sterge (i, j);
euler (a[i][j]);
}
e[++ne]=i;
}
int main ()
{
ofstream fout ("ciclueuler.out");
read ();
for (int i=1;i<=n;i++)
if (gr[i]%2==1)
{
fout<<"-1";
return 0;
}
euler (1);
for (int i=2;i<=m+1;i++)
fout<<e[i]<<" ";
return 0;
}