Cod sursa(job #3247473)

Utilizator Sorin_GabrielGabara Sorin Gabriel Sorin_Gabriel Data 7 octombrie 2024 22:03:33
Problema Problema Damelor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
#define VMAX 200005
using namespace std;
ifstream fin ("damesah.in");
ofstream fout ("damesah.out");

int tabla[14][14][14];
int regina[14];
int col[14], diag_prima[28], diag_sec[28];
int nr;
int d_i[]={-1,-1,0,1,1,1,0,-1};
int d_j[]={0,1,1,1,0,-1,-1,-1};



bool exista(int i, int j, int n)
{
    for(int k=0;k<n;k++)
    if(tabla[k][i][0] || tabla[k][0][j] || tabla[k][i-min(i,j)][j-min(i,j)])
        return false;
    return true;
}
void modifica_tabla(int i, int j, bool x,int index)
{
    for(int k=0;k<index;k++)
    {
        tabla[k][i][0] = tabla[k][0][j] = tabla[k][i-min(i,j)][j-min(i,j)] = x;
    }
}

void dama(int index,int n)
{
    int i,j;

    if(index==n)
    {
        if(nr==0)
        {
            for(int k = 0; k < n; k++)
            {
                cout<<regina[k]+1;
            }
            cout<<'\n';
        }
        nr++;
        return;
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(exista(i,j,index))
            {
                regina[index] =j;
                modifica_tabla(i,j,true,index);
                dama(index+1,n);
                modifica_tabla(i,j,false,index);
            }
        }
    }
}

int main()
{
    int n,m,i,j,k,t,nr,q,x,suma1,suma2;
    fin>>n;

    dama(0,n);
    fout<<nr<<'\n';
    return 0;
}