Cod sursa(job #1040672)

Utilizator PaaaulicaPaulica Paaaulica Data 24 noiembrie 2013 19:43:51
Problema Dame Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int st[1000],n,q;

int modul(int x)
{   // functia asta returneaza modului unui nr
    if(x<0) x*=-1;
    return x;
}
int valid(int k)
{
    // daca a mai fost deja pe stiva acel element
    // sau daca ultimul element adaugat in stiva se afla pe diagonala cu oricare element
    // din restul stivei, returnam 0 :(
    for(int i=1; i<k; i++)
        if(st[i]==st[k]  || modul(st[k]-st[i])==modul(k-i)) return 0;
    return 1;
}

bool done=false;
void tipar(int k)
{

    /*
    Afisarea stivei
    for(int i=1; i<=k; i++)
        cout<<  st[i] <<" ";
    cout<<endl;
    */
    // Afisarea tablei

    cout<<n<<endl;;
    for(int i=1; i<=n; i++)
    {
       cout<<i<<" "<<st[i]<<endl;
    }

    done=true;

}

void back(int k)
{ if(done) return;
    for(int i=1; i<=n; i++)
    {
        if(done) return;
        st[k]=i; // elementul de pe pozitia k din stiva va primi valoarea lui i
        if(valid(k)) // daca stiva pana la nivelul k este valida
        {

            if(k==n)
                tipar(k);
            else
                back(k+1); // continuam la urmatorul nivel
        }
    }
}

int main()
{
    freopen("dame.in","r",stdin);
     freopen("dame.out","w",stdout);

    cin>>n;
    back(1); // apelam back


    return 0;
}