Cod sursa(job #2498191)

Utilizator mirceaisherebina mircea mirceaishere Data 23 noiembrie 2019 16:47:08
Problema Problema Damelor Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.54 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");

int n, k, sol, s[30], coloana[30], diagonala[30][30];


void f (int nivel){

    /*
    for(int aux=1; aux<=nivel; aux++){
        cout<<s[aux]<<" ";
    }
    cout<<"\n";
    */

    if(nivel>n){
        sol++;
        if(sol==1){
            for(int i=1; i<=n; i++){
                fout<<s[i]<<" ";
            }
            fout<<"\n";
        }
    }
    for(int i=1; i<=n; i++){
        if(coloana[i]==0 && diagonala[nivel][i]==0){
            coloana[i]=1;
            int ii=nivel;
            int jj=i;
            while(ii<=n && jj<=n && ii>0 && jj>0){
                ii++;
                jj++;
                diagonala[ii][jj]=1;
            }
            ii=nivel;
            jj=i;
            while(ii<=n && jj<=n && ii>0 && jj>0){
                ii++;
                jj--;
                diagonala[ii][jj]=1;
            }
            s[nivel]=i;
            f(nivel+1);
            coloana[i]=0;
            int ii2=nivel;
            int jj2=i;
            while(ii2<=n && jj2<=n && ii2>0 && jj2>0){
                ii2++;
                jj2++;
                diagonala[ii2][jj2]=0;
            }
            ii2=nivel;
            jj2=i;
            while(ii2<=n && jj2<=n && ii2>0 && jj2>0){
                ii2++;
                jj2--;
                diagonala[ii2][jj2]=0;
            }
        }
    }
}


int main(){
    fin>>n;
    f(1);
    fout<<sol;
}