Cod sursa(job #115732)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 16 decembrie 2007 21:16:07
Problema Grozavesti Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <stdio.h>

long a[303][303], n, contor, min, l, c;

typedef struct
{
	long op, i, j;
} solutie;
solutie sol[700];


void interschimb_coloane(long x, long y)
{
	int i;
	for (i = 1; i <= n; i++)
	{
		a[i][0] = a[i][x];
		a[i][x] = a[i][y];
		a[i][y] = a[i][0];
	}
}


void interschimb_linii(long x, long y)
{	
	int i;
	for (i = 1; i <= n; i++)
	{
		a[0][i] = a[x][i];
		a[x][i] = a[y][i];
		a[y][i] = a[0][i];
	}
}

void minim(long x)
{
	long i, j;
	min = 1000005;

	for (i = x; i <= n; i++)
		for (j = x; j <= n; j++)
			if (min > a[i][j])
			{
				min = a[i][j]; 
				l = i;
				c = j;
			}
}


int main()
{
	freopen("grozavesti.in","r",stdin);
	freopen("grozavesti.out","w",stdout);
	scanf("%ld", &n);

	long i, j;
	for (i = 1; i <= n; i++)
		for (j = 1; j <= n; j++) scanf("%ld",&a[i][j]);

	for (i = 1; i <= n; i++)
	{
		minim(i);

		if (c != i && c > 0)
		{
			interschimb_coloane(i,c);
			sol[++contor].op = 1;
			sol[contor].i = i;
			sol[contor].j = c;
		}

		if (l != i && l > 0)
		{
			interschimb_linii(i,l);
			sol[++contor].op = 2;
			sol[contor].i = i;
			sol[contor].j = l;			
		}
	}

	char x;
	printf("%ld\n",contor);
	for (i = 1; i <= contor; i++)
	{
		if (sol[i].op == 1) x = 'C';
		else x = 'L';
		printf("%c %ld %ld\n", x, sol[i].i, sol[i].j);
	}
	return 0;
}