Cod sursa(job #2421293)

Utilizator mariasmmskklns mariasmm Data 14 mai 2019 17:40:27
Problema Problema Damelor Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.64 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f ("damesah.in");
ofstream g ("damesah.out");
int v[14],n;
long long p=0;
bool pr = false;

void print()
{
    if (!pr)
    {
    for (unsigned int i=1; i<=n; i++)
        g<<v[i]<<" ";
    g<<"\n";
    pr=true;
    }
}
int succesor(int k)
{
    if (v[k]<n)
        {
            v[k]++;
            return 1;
        } else
    return 0;
}
int solutie(int k)
{
    return (k==n);
}

int valid(int k)
{
    int cl=k,cc=v[k];
    for(unsigned int i=1; i<k; i++)
        if (v[i]==v[k])
            return 0;
    while ((cc>1)&&(cl>1))
    {
        cc--; cl--;
        if (v[cl]==cc)
            return 0;
    }
    cl=k; cc=v[k];
    while ((cl>1)&&(cc<8))
    {
        cc++; cl--;
        if (v[cl]==cc)
            return 0;
    }
   /* cl=k; cc=v[k];
    while ((cc<8)&&(cl<8))
    {
        cc++; cl++;
        if (v[cl]==cc)
            return 0;
    }
    cl=k; cc=v[k];
    while ((cc>1)&&(cl<8))
    {
        cc--; cl++;
        if (v[cl]==cc)
            return 0;
    }
*/
    return 1;
}

void Back(int n)

{
    int isV=0, isS=0, k=1;
    v[k]=0;
    while (k)
    {
        isS=0; isV=0;
        do
        {
            isS=succesor(k);
            if (isS)
                isV=valid(k);
        } while(isS&&!isV);
    if (isS)
        if (solutie(k))
            {
                print();
                p++;
            } else
        {
            k++;
            v[k]=0;
        } else
            k--;

    }
}

int main ()
{
    f>>n;
    Back(n);
    g<<p;
    return 0;
}