Pagini recente » Cod sursa (job #2372832) | Cod sursa (job #2236734) | Cod sursa (job #1315604) | Cod sursa (job #60963) | Cod sursa (job #2062131)
#include <fstream>
#define NMAX 5005
using namespace std;
int nr[NMAX][3],v[NMAX]= {},n,NrPasi=0;
ifstream f("sortare.in");
ofstream g("sortare.out");
void Insereaza(int poz,int x)
{
int aux=x,aux2=v[poz],i;
for(i=poz; i<x; ++i)
{
v[i]=aux;
aux=aux2;
aux2=v[i+1];
}
v[x]=aux;
}
void solutie(int Dr)
{
int Lungime=Dr,pozMax,pozMax2;
int a=nr[Lungime][0],b=nr[Lungime][1],c=nr[Lungime][2];
if(Lungime==0) return;
if(Lungime==1)
{
Insereaza(1,1);
return;
}
NrPasi++;
if(a==c) a^=b^=a^=b;
if(a==b || b==c)
{
pozMax=b;
solutie(Dr-1);
Insereaza(pozMax,Dr);
}
else
{
if(a>b)
{
if(c>a){pozMax=c;pozMax2=a;}
else {pozMax=a;pozMax2=(b>c?b:c);}
}
else
{
if(c>b) {pozMax=c;pozMax2=b;}
else {pozMax=b;pozMax2=(a>c?a:c);}
}
solutie(Dr-2);
Insereaza(pozMax2,Dr-1);
Insereaza(pozMax,Dr);
}
}
int main()
{
f>>n;
int i;
for(i=2; i<=n; ++i) f>>nr[i][0]>>nr[i][1]>>nr[i][2];
solutie(n);
g<<NrPasi<<'\n';
for(i=1; i<=n; ++i) g<<v[i]<<' ';
return 0;
}