Pagini recente » Cod sursa (job #1663587) | Cod sursa (job #933554) | Cod sursa (job #1092113) | Cod sursa (job #111812) | Cod sursa (job #323890)
Cod sursa(job #323890)
#include <cstdio>
#define file_in "grozavesti.in"
#define file_out "grozavesti.out"
#define Nmax 310
struct mutare
{
char c;
int a,b;
}in[Nmax],fi[Nmax];
int nri,nrf;
int m[Nmax][Nmax];
int n;
int solve;
void swap(int *a, int *b)
{
int aux=*a;
*a=*b;
*b=aux;
}
void scl(int a, int b)
{
int i;
for(i=a;i<=n;++i)
swap(&m[a][i],&m[b][i]);
}
void scc(int a, int b)
{
int i;
for(i=a;i<=n;++i)
swap(&m[i][a],&m[i][b]);
}
void citire()
{
int i,j;
scanf("%d\n",&n);
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
scanf("%d", &m[i][j]);
}
void bk(int k)
{
if(solve) return;
if(k>n)
{
int i;
solve=1;
for(i=1;i<=nri;++i)
fi[i]=in[i];
nrf=nri;
}
else
{
int i;
if(m[k][k]>=m[k-1][k-1])
bk(k+1);
for(i=k+1;i<=n;++i)
{
if(m[i][k]>=m[i-1][k-1])
{
nri++;
in[nri].c='L';
in[nri].a=k;
in[nri].b=i;
scl(k,i);
bk(k+1);
scl(k,i);
nri--;
}
if(m[k][i]>=m[k-1][i-1])
{
nri++;
in[nri].c='C';
in[nri].a=k;
in[nri].b=i;
scc(k,i);
bk(k+1);
scc(k,i);
nri--;
}
}
}
}
void afisare()
{
int i;
printf("%d\n",nrf);
for(i=1;i<=nrf;i++)
printf("%c %d %d\n",fi[i].c,fi[i].a,fi[i].b);
}
int main()
{
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
citire();
bk(1);
afisare();
fclose(stdin);
fclose(stdout);
return 0;
}