Cod sursa(job #1369491)

Utilizator EpictetStamatin Cristian Epictet Data 3 martie 2015 08:59:52
Problema Grozavesti Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.2 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("grozavesti.in");
ofstream fout ("grozavesti.out");
int N, V[310][310];
struct sol { char c; int s1, s2; } aux;
vector < sol > S;

bool Verif()
{
    for (int i = 1; i <= N; i++)
    {
        if (V[i][i] < V[i-1][i-1]) return 0;
    }
    return 1;
}

int main()
{
    fin >> N;
    for (int i = 1; i <= N; i++)
    {
        for (int j = 1; j <= N; j++)
        {
            fin >> V[i][j];
        }
    }

    int i = 1;
    while (!Verif())
    {
        int minim = max(V[i-1][i-1], V[i][i]), nr1, nr2;
        char L = 'a';
        for (int j = i + 1; j <= N; j++)
        {
            if (V[i][j] <= minim && V[i][j] >= V[i-1][i-1])
            {
                minim = V[i][j];
                L = 'C';
                nr1 = i;
                nr2 = j;
            }
            if (V[j][i] <= minim && V[i][j] >= V[i-1][i-1])
            {
                minim = V[i][j];
                L = 'L';
                nr1 = i;
                nr2 = j;
            }
        }

        for (int j = i - 1; j >= 1; j--)
        {
            if (V[i][j] <= minim && V[i][j] >= V[i-1][i-1])
            {
                minim = V[i][j];
                L = 'C';
                nr1 = i;
                nr2 = j;
            }
            if (V[j][i] <= minim && V[i][j] >= V[i-1][i-1])
            {
                minim = V[i][j];
                L = 'L';
                nr1 = i;
                nr2 = j;
            }
        }


        if (L != 'a')
        {
            for (int k = 1; k <= N; k++)
            {
                if (L == 'C')
                {
                    swap (V[k][nr1], V[k][nr2]);
                }
                else
                {
                    swap (V[nr1][k], V[nr2][k]);
                }
            }
            aux.c = L;
            aux.s1 = nr1;
            aux.s2 = nr2;
            S.push_back(aux);
        }
        i++;
    }

    fout << S.size() << '\n';
    for (int i = 0; i < S.size(); i++)
    {
        fout << S[i].c << ' ' << S[i].s1 << ' ' << S[i].s2 << '\n';
    }
    fout.close();
    return 0;
}