• Aucun résultat trouvé

a et b : les coordonnées de la nouvelle dame dans le tableau M

N/A
N/A
Protected

Academic year: 2022

Partager "a et b : les coordonnées de la nouvelle dame dans le tableau M"

Copied!
2
0
0

Texte intégral

(1)

# =================================== #

# Le problème des n dames #

# =================================== #

# www.panamaths.net #

# Juin 2015 #

# Dernière mise à jour : octobre 2017 #

# =================================== # from numpy import array, zeros

# fonction Prise

# Permet la mise à jour de l'échiquier (cases en prise) dès qu'une nouvelle dame

# est placée.

# Arguments :

# M : l'échiquier (tableau numpy) dans son état courant (i.e. venant de recevoir

# une nouvelle dame.).

# a et b : les coordonnées de la nouvelle dame dans le tableau M.

def Prise(M,a,b):

global n

# Mise à 1 des éléments de la ligne d'indice a for j in range(n):

if j != b and M[a,j] == 0:

M[a,j] = 1

# Mise à 1 des éléments de la colonne d'indice b for i in range(n):

if i != a and M[i,b] == 0:

M[i,b] = 1

# Mise à 1 des éléments de la diagonale principale passant par M(a,b) i = 1

while a+i < n and b+i < n:

if M[a+i,b+i] == 0:

M[a+i,b+i] = 1 i += 1

i = 1

while a-i >= 0 and b-i >= 0:

if M[a-i,b-i] == 0:

M[a-i,b-i] = 1 i += 1

# Mise à 1 des éléments de la diagonale secondaire passant par M(a,b) i = 1

while a+i < n and b-i >= 0:

if M[a+i,b-i] == 0:

M[a+i,b-i] = 1 i += 1

i = 1

while a-i >= 0 and b+i < n:

if M[a-i,b+i] == 0:

M[a-i,b+i] = 1 i += 1

# Renvoi de l'échiquier à jour return(M)

# fonction Place

# Fonction récursive permettant le placement des dames def Place(T,N):

global n, S

for i in range(n):

if T[i,n-N] == 0:

1

(2)

T2 = array(T) T2[i,n-N] = 2

T2 = Prise(T2,i,n-N)

# Il n'y a qu'une dame à placer (N=1) et on a pu le faire : on a une

# nouvelle solution !

# On incrémente le nombre de solutions (S) et on affiche la solution

# courante (T2) if N == 1:

S += 1

print('Solution N°',S,':') print(T2,'\n')

# On a pu placer une dame mais il en reste N-1 à placer : appel # récursif à la fonction Place

else:

Place(T2,N-1) return()

# =============== #

# DEBUT DU SCRIPT #

# =============== #

# variables globales global n, S

# Saisie de la taille de l'échiquier n = 0

ans = True

while ans or n <= 0 : try:

n = int(input('Nombre de dames à placer (saisissez un entier STRICTEMENT POSITIF) ? '))

ans = False except ValueError:

print("Vous devez saisir un entier !")

# Initialisation de l'échiquier (tableau numpy (variable E) rempli de zéros) et

# du nombre de solutions (variable S) E = zeros((n,n))

S = 0

# Appel initial de la fonction place Place(E,n)

if S == 0:

print('Le problème n\'admet pas de solution !')

# ============= #

# FIN DU SCRIPT #

# ============= #

2

Références

Documents relatifs

Le point H étant le projeté orthogonal du point O sur la droite ( ) BC , le vecteur OH JJJG est orthogonal à tout vecteur directeur de cette droite, en particulier au vecteur

1°) Déterminer les limites de f aux bornes de son ensemble de définition. 4°) Dresser le tableau de variations complet de f et tracer la courbe (C f ). Christophe navarri

[r]

[r]

 Il y a donc proportionnalité lorsque tous les couples de nombres (non nuls) qui se correspondent donnent le même quotient. Si les points marqués sur un graphique sont alignés

Programmer cet algorithme sur votre calculatrice et le tester avec plusieurs valeurs. Ecrire un algorithme permettant de calculer les coordonnées du milieu

Sachant que le produit de deux nombres A et B est positif et que leur somme est négative, quels sont les signes de A et de B.. 69

o mise en œuvre d’un enduit à la chaux Restauration des parements intérieurs en pierre de taille : piquetage des ragréages et joints en ciment, dessalement des pierres,