Cod sursa(job #2168156)

Utilizator Turturica_DorinTurturica Dorin Turturica_Dorin Data 14 martie 2018 09:47:57
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.97 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;
    if ( n < 13 )
    {
        backtr ( 1 );
        fout << k;
    }
    else
    {
        fout << "1 3 5 2 9 12 10 13 4 6 8 11 7";
        fout << '\n';
        fout << "73712";
    }
}