Cod sursa(job #115707)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 16 decembrie 2007 20:48:43
Problema Grozavesti Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>

int a[301][301], n, contor, min, l, c;

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

void interschimb_coloane(int x, int 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(int x, int 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(int x)
{
	int i, j;
	min = 32000;

	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("%d", &n);
	int i, j;
	for (i = 1; i <= n; i++)
		for (j = 1; j <= n; j++) scanf("%d",&a[i][j]);

	for (i = 1; i <= n; i++)
	{
		minim(i);
		if (c != i && c)
		{
			interschimb_coloane(i,c);
			sol[++contor].op = 1;
			sol[contor].i = i;
			sol[contor].j = c;
		}

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

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