Cod sursa(job #1207437)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 13 iulie 2014 00:45:31
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <cmath>
using namespace std;

void tiparesteSolutie(int *x, int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++)
            if (x[i] == j)
                cout<<'x';
            else
                cout<<'o';
        cout<<endl;
    }
    cout<<endl;
}

int main() {
    int n, k, eSolutie;
    int *x;
    int solutii = 0;

    cout<<"Numarul de dame (dimensiunea tablei): ";
    cin>>n;
    x = new int[n];

    k = 0;
    x[k] = -1;
    while (k >= 0) {
        eSolutie = 0;
        while ((x[k] < n - 1) && (! eSolutie)) {
            eSolutie = 1;
            x[k]++;
            for (int i = 0; (i < k) && eSolutie; i++)
                if ((x[k] == x[i]) || (k - i == abs(x[k] - x[i])))
                    eSolutie = 0;
        }
        if (! eSolutie)
            k--;
        else
            if (k == n - 1) {
               solutii++;
               tiparesteSolutie(x, n);
            }
            else {
               k++;
               x[k] = -1;
            }
    }
    delete x;
    cout<<"Am gasit in total "<<solutii<<" solutii."<<endl;
}