Cod sursa(job #2168121)

Utilizator Turturica_DorinTurturica Dorin Turturica_Dorin Data 14 martie 2018 09:39:04
Problema Problema Damelor Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.81 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin ("damesah.in");
ofstream fout ("damesah.out");

int v[ 20 ][ 20 ], n, afi, st[ 20 ], k;

int verificare ( int i, int j )
{
    int iv, jv;
    for ( iv = i, jv = j; iv >= 1 && jv >= 1; iv--, jv -- )
    {
        if ( v[ iv ][ jv ] == 1 )
        {
            return 0;
        }
    }
    for ( iv = i, jv = j; iv <= n && jv <= n; iv ++, jv ++ )
    {
        if ( v[ iv ][ jv ] == 1 )
        {
            return 0;
        }
    }
    for ( iv = i, jv = j; iv >= 1 && jv <= n; iv --, jv ++ )
    {
        if ( v[ iv ][ jv ] == 1 )
        {
            return 0;
        }
    }
    for ( iv = i, jv = j; iv <= n && jv >= 1; iv ++, jv -- )
    {
        if ( v[ iv ][ jv ] == 1 )
        {
            return 0;
        }
    }
    for ( iv = i; iv >= 1 ; iv -- )
    {
        if ( v[ iv ][ j ] == 1 )
        {
            return 0;
        }
    }
    for ( iv = i; iv <= n; iv ++ )
    {
        if ( v[ iv ][ j ] == 1 )
        {
            return 0;
        }
    }
    return 1;
}

void backtr ( int nivel )
{
    int i;
    if ( nivel > n )
    {
        if ( afi == 0 )
        {
            k ++;
            afi = 1;
            for ( i = 1; i <= n; i++ )
            {
                fout << st[ i ] << ' ';
            }
            fout << '\n';
        }
        else
        {
            k ++;
        }
        return;
    }

    for ( i = 1; i <= n; i++ )
    {
        if ( verificare ( nivel, i ) == 1 )
        {
            st[ nivel ] = i;
            v[ nivel ][ i ] = 1;
            backtr ( nivel + 1 );
            v[ nivel ][ i ] = 0;
            st[ nivel ] = 0;
        }
    }
}

int main ()
{
    fin>> n;
    backtr ( 1 );
    fout << k;
}