Cod sursa(job #657281)

Utilizator AndreeaNNedelcu Andreea AndreeaN Data 6 ianuarie 2012 11:56:55
Problema Grozavesti Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <stdio.h>
FILE *f=fopen("grozavesti.in","r"),*g=fopen("grozavesti.out","w");
long int n,a[302][302],poz=0;

struct solutie{

    char c;
    long int a;
    long int b;
}v[3005];

void citire(){
long int i,j;
    fscanf(f,"%ld\n",&n);
    for(i=1; i<=n; i++){
        for(j=1; j<=n; j++){
            fscanf(f,"%ld ",&a[i][j]);
        }
    }

}

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

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

void parcurgere(){
long int i,min=1000001,t,p;
    for(t=1; t<=n; t++){
        min=a[t][t];
       // printf("min=%ld\n",min);
        p=t;
        for(i=t+1; i<=n; i++){
            if(a[i][i]<min){
                min=a[i][i];
                p=i;
            }
        }

        if(p!=t){
           //  printf("%ld %ld\n",t,p);
            //interschimbare
            poz++;
            v[poz].c='C'; v[poz].a=t; v[poz].b=p;
            interschcol(t,p);
            poz++;
            v[poz].c='L'; v[poz].a=t; v[poz].b=p;
            interschlinie(t,p);
        }
    }
}

void afisare(){
long int i;
    fprintf(g,"%ld\n",poz);
    for(i=1; i<=poz; i++){
        fprintf(g,"%c %ld %ld\n",v[i].c, v[i].a, v[i].b);
    }
}

int main()
{
    citire();
    parcurgere();
    afisare();
    return 0;
}