1281 - Regine1

De la Universitas MediaWiki

Cerința

Se consideră o tablă de șah de dimensiune n. Să se plaseze pe tablă n regine astfel încât să nu existe două regine care să se atace.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieșire

Programul va afișa pe ecran o singură configurație validă a tablei de șah. Ea va fi alcătuită din n linii cu câte n caractere - sau *, separate prin câte un spațiu. Caracterul - reprezintă o poziție liberă de pe tablă, iar caracterul * reprezintă o poziție de pe tablă ocupată de o regină.

Restricții și precizări

  • 4 ≤ n ≤ 10;
  • două regine se atacă dacă se află pe aceeași linie, aceeași coloană sau aceeași diagonală;
  • orice configurație validă a tablei este acceptată.

Exemplul 1

Intrare

4

Ieșire

- - * - 
* - - - 
- - - * 
- * - - 

Exemplul 2

Intrare

1

Consola

Dimensiunea tablei trebuie să fie între 4 ștre 4 și 10).

Rezolvare

def verifica_restrictie_n(n):
    # Verifică restricția asupra valorii lui n
    return 4 <= n <= 10

def verifica_restrictii(tabla, linie, coloana, n):
    # Verifică dacă este sigur să plasezi o regină la poziția (linie, coloana)

    # Verifică pe aceeași linie
    if '*' in tabla[linie]:
        return False

    # Verifică pe aceeași coloană
    if '*' in [tabla[i][coloana] for i in range(n)]:
        return False

    # Verifică pe diagonala principală
    if '*' in [tabla[i][i] for i in range(min(linie, coloana) + 1)]:
        return False

    # Verifică pe diagonala secundară
    if '*' in [tabla[i][coloana - (linie - i)] for i in range(min(linie, coloana, n - coloana - 1) + 1)]:
        return False

    return True

def afiseaza_tabla(tabla, n):
    # Afișează configurația tablei de șah
    for i in range(n):
        print(' '.join(tabla[i]))

def rezolva(tabla, linie, n):
    # Verifică dacă am plasat toate reginele
    if linie == n:
        afiseaza_tabla(tabla, n)
        exit()

    # Plasează regina pe fiecare coloană a liniei curente
    for coloana in range(n):
        if verifica_restrictii(tabla, linie, coloana, n):
            tabla[linie][coloana] = '*'
            rezolva(tabla, linie + 1, n)
            tabla[linie][coloana] = '-'

# Cerem utilizatorului să introducă dimensiunea tablei de șah
input_n = input("Introduceți dimensiunea tablei de șah (n între 4 și 10): ")

# Verificăm restricția asupra valorii lui n
try:
    n = int(input_n)
    if verifica_restrictie_n(n):
        # Inițializăm tabla de șah cu caractere '-'
        tabla = [['-' for _ in range(n)] for _ in range(n)]

        # Apelăm funcția pentru a rezolva problema
        rezolva(tabla, 0, n)
    else:
        print("Dimensiunea tablei trebuie să fie între 4 și 10.")
except ValueError:
    print("Introduceți o valoare validă pentru n.")