Cod sursa(job #1326718)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 25 ianuarie 2015 21:27:00
Problema Problema Damelor Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.59 kb
#include <fstream>
using namespace std;

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

int n, m, i, j, k, ok, minim, maxim;
int a[15][15], ok4, nr;

void sol(){
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= n; j ++)
            if(a[i][j] == 1)
                fout << j << " ";
    fout << "\n";
    return;
}

void back(int k){
    if(k == n + 1){
        if(ok4 == 0){
            sol(); ok4 = 1;
        }
        nr ++;
    }
    else
        for(int i = 1; i <= n; i ++){
            a[k][i] = 1;
            int k1, k2, ok3 = 1;
            int ok1 = 1, ok2 = 1;
//======================================================
            k1 = k - 1; k2 = i - 1;
            while(a[k1][k2] == 0 && k1 >= 1 && k2 >= 1){
                k1 --; k2 --;
            }
            if(k1 >= 1 && k2 >= 1)
                ok1 = 0;
//======================================================
            k1 = k - 1;
            while(a[k1][i] == 0 && k1 >= 1)
                k1 --;
            if(k1 != 0)
                ok2 = 0;
//======================================================
            k1 = k - 1; k2 = i + 1;
            while(a[k1][k2] == 0 && k1 >= 1 && k2 <= n){
                k1 --; k2 ++;
            }
            if(k1 >= 1 && k2 <= n)
                ok3 = 0;
//======================================================
            if(ok1 == 1 && ok2 == 1 && ok3 == 1)
                back(k + 1);
            a[k][i] = 0;
        }
    return;
}

int main(){
    fin >> n;
    back(1);
    fout << nr;
    return 0;
}