Cod sursa(job #3265508)

Utilizator AlexandraVarutuValexandra AlexandraVarutu Data 30 decembrie 2024 17:53:11
Problema Problema Damelor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <fstream>
using namespace std;

ifstream fin("damesah.in");
ofstream fout("damesah.out");
//evaluare
long long n, cnt;
int a[20][20];
int dx[8] = {-1, -1, -1, 0}; // Directions to check
int dy[8] = {0, -1, 1, -1};

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

bool verif(int l, int c) {
    for (int i = 0; i < 4; i++) {
        bool ok = 0;
        int lv = l + dx[i];
        int cv = c + dy[i];

        if (lv < 1 || lv > n || cv < 1 || cv > n)
            continue;

        while (lv >= 1 && lv <= n && cv >= 1 && cv <= n && a[lv][cv] == 0) {
            ok = 1;
            lv += dx[i];
            cv += dy[i];

            if (lv < 1 || lv > n || cv < 1 || cv > n)
                break;

            if (a[lv][cv] == 1) {
                ok = 0;
                break;
            }
        }

        if (ok == 0)
            return false;
    }

    return true;
}


int asezD(int c) {
    if (c > n) {
        cnt++;
        if (cnt == 1)
            printsol();
        return cnt;
    }


    for (int i = 1; i <= n; i++) {
        if (verif(i, c)) {
            a[i][c] = 1;
            asezD(c + 1);
            a[i][c] = 0;
        }
    }
    return cnt;
}

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