Cod sursa(job #1743817)

Utilizator moise_alexandruMoise Alexandru moise_alexandru Data 18 august 2016 20:05:12
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("damesah.in");
ofstream out("damesah.out");
const int maxn = 20;
int col[maxn], reg[maxn][maxn];
int principala[maxn];
int secundara[maxn];
int n, nr;

void mark(int l, int c)
{

    col[c] = 1 - col[c];
    principala[n + c - l] = 1 - principala[n + c - l];
    secundara[l + c + 1] = 1 - secundara[l + c + 1];
}

void _back_(int lin)
{
    if(lin == n + 1)
    {
        if(nr == 0)
        {
            for(int i = 1; i <= n; i++)
                for(int j = 1; j <= n; j++)
                    if(reg[i][j] == 1)
                        out << j << " ";
            out << "\n";
        }
        nr++;
    }
    else
    {
        for(int j = 1; j <= n; j++)
        {
            if(!col[j] && !principala[n + j - lin] && !secundara[lin + j + 1])
            {
                reg[lin][j] = 1;
                mark(lin, j);
                _back_(lin + 1);
                reg[lin][j] = 0;
                mark(lin, j);
            }
        }
    }
}

int main()
{
    in >> n;
    _back_(1);
    out << nr;
    return 0;
}