Cod sursa(job #1724868)

Utilizator zvonTutuldunsa Voronokda zvon Data 4 iulie 2016 14:31:03
Problema Problema Damelor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.91 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;

int cnt = 0;

int sol[14];

int isValid(int col[], int dim, int val) {
    for (int i = 1; i < dim; i++) {
        //if (col[i] == val || col[i] + i == dim + val || abs(i - col[i]) == abs(val - dim))
        if (col[i] == val) {
            //cout << "coli = val\n";
            return 0;

        }
        if (col[i] + i == dim + val) {
            //cout << "suma e egala\n";
            return 0;
        }
        if (abs(i - dim) == abs(val - col[i])) {
            //cout << "col[" << i << "] - " << i << " ==" << val << " - " << dim << "\n";
            return 0;
        }
    }
    return 1;
}

void printV(int col[], int n) {
    for (int i = 1; i <= n; i++) {
        cout << col[i] << " ";
    }
    cout << "\n";
}

void countAll(int col[], int n, int row) {
    //cout << "sunt pe linia " << row << "\n";
    //printV(col, n);
    for (int i = 1; i <= n; i++) {
        if (isValid(col, row, i)) {
            col[row] = i;
            if (row == n) {
                cnt++;
                //cout << "------------------------\n";
                if (cnt == 1) {
                    for (int j = 1; j <= n; j++) {
                        sol[j] = col[j];
                    }
                }

                //cout << "------------------------\n";
                return;
            } else {
                //cout << "trimit pentru linia " << row + 1 << "\n";
                countAll(col, n, row + 1);
            }
        }
    }
    col[row] = 0;
}

int main(void) {
    int col[14] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    ifstream fi("damesah.in");
    int n;
    fi >> n;

    countAll(col, n, 1);

    ofstream fo("damesah.out");
    for (int i = 1; i <= n; i++) {
        fo << col[i] << ' ';
    }
    fo << "\n";
    fo << cnt << "\n";
    return 0;
}