Cod sursa(job #2154553)

Utilizator UnseenMarksmanDavid Catalin UnseenMarksman Data 7 martie 2018 05:39:50
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <cmath>

using namespace std;

int n,cnt,sol[15],x[15];

bool valid(int k)
{
    for(int i=1; i<k; i++)
    {
        if(sol[i]==sol[k] || abs(sol[k]-sol[i])==k-i) return false;
    }
    return true;
}

int backtracking(int n)
{
    int k=1,cnt=0;
    bool prima=1, ok;

    sol[k]=0;
    while(k>0)
    {
        ok=0;
        while(sol[k]<n&&!ok)
        {
            sol[k]++;
            ok=valid(k);
        }
        if(!ok)
        {
            k--;
        }
        else
        {
            if(k == n)
            {
                if(prima)
                {
                    prima=0;
                    for(int i=1; i<=n; i++)
                    {
                        x[i]=sol[i];
                    }
                }
                cnt++;
            }
            else
            {
                k++;
                sol[k]=0;
            }
        }
    }
    return cnt;
}

int main()
{
    ifstream fin("damesah.in");
    ofstream fout("damesah.out");
    fin>>n;
    int nr=backtracking(n);
    for(int i=1; i<=n; i++)
    {
        fout<<x[i]<<' ';
    }
    fout<<'\n'<<nr;
    return 0;
}