Pagini recente » Cod sursa (job #1730048) | Cod sursa (job #1281724) | Cod sursa (job #2155709) | Cod sursa (job #1999562) | Cod sursa (job #631674)
Cod sursa(job #631674)
#include<fstream>
#include<list>
#include<vector>
using namespace std;
ifstream fin("eulerian.in");
ofstream fout("eulerian.out");
int n,a,b,j=1,i,eul[1001],aux[1001],m;
list<int> v[10001];
list<int>::iterator it;
int merg(int x)
{ if (v[x].front() != 0)
{ ++j;
aux[j] = v[x].front();
v[x].pop_front();
it = v[aux[j]].begin();
v[aux[j]].remove(x);
merg(aux[j]);
}
return 0;
}
int adaug()
{int ok=0,x;
while (ok != 1)
{ ok = 1;
i = 1;
while (v[i].front() == 0 && i < n)
++i;
if (i == n)
{ for (i=1;i<=j;++i)
fout << eul[i] << " ";
return 0;
}
else
{ j = 1;
aux[1] = i;
merg(i);
i = 1;
while (eul[i] != aux[1] && i <= m)
++i;
for (x=1;x<j;++x)
{ eul[m+x+1] = eul[i+x];
eul[i+x] = aux[x+1];
}
m = m + j -1;
}
}
return 0;
}
int main()
{ fin >> n;
for(i=1;i<=n;++i)
v[i].push_front(0);
while (fin >> a >> b)
{ v[a].push_front(b);
v[b].push_front(a);
}
aux[1] = 1;
merg(1);
m = j;
for (i=1;i<=m;++i)
eul[i] = aux[i];
adaug();
return 0;
}