Cod sursa(job #1570281)

Utilizator razvan99hHorhat Razvan razvan99h Data 16 ianuarie 2016 12:22:13
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("damesah.in");
ofstream g("damesah.out");
int n, cont;
pair <int,int> regina[20];
void afisare()
{   //pentru a le afisa pe toate
    cout<<"Avem reginele: \n";
    for(int i=1;i<=n;i++)
        cout<<regina[i].first<<' '<<regina[i].second<<'\n';
}
inline int mabs(int x) //inline pt optimiazare
{   if(x<0) return -x;
    return x;
}
bool valid(int ri, int rj, int nivel)//ri si rj is coord reginei actuale,
{   //mergem ca la permutari, si verificam
    for(int i=1;i<nivel;i++)
        if(rj==regina[i].second || (mabs(ri-regina[i].first)==mabs(rj-regina[i].second)))// daca se afla pe aceeasi coloana || diag
            return 0;
    return 1;
}
void back(int linie)
{   if(linie==n+1)
    {   //afisare();
        if(cont==0)
            for(int i=1;i<=n;i++)
                g<<regina[i].second<<' ';
        cont++;
        return;
    }
    //incercam sa punem regina de pe linia actuala pe fiecare coloana pe care se poate(valid)
    for(int coloana=1; coloana<=n;coloana++)
        if(valid(linie, coloana, linie))
        {   regina[linie]=make_pair(linie, coloana);
            back(linie+1);
        }
}
int main()
{   f>>n;
    back(1);
    g<<'\n'<<cont;
    return 0;
}