cavalier.py

Created by bilouclic

Created on October 10, 2024

2.11 KB


def deplacements_valides_cavalier(n : int, pos : tuple):
    ''' entrée : n est la longueur n du côté de l’échiquier
                 pos est la position pos du cavalier
        sortie : la liste des positions suivantes que le cavalier peut occuper.
    '''
    lst_nv_pos = []
    lst_mv = [(1,2),(1,-2),(-1,2),(-1,-2),(2,1),(2,-1),(-2,1),(-2,-1)]
    for mv in lst_mv :
        nv_pos = (pos[0]+mv[0], pos[1]+mv[1])
        if 0<=nv_pos[0]<n and 0<=nv_pos[1]<n : lst_nv_pos.append(nv_pos)
    return lst_nv_pos

def parcours(n : int, pos : tuple, nbp = 1, s = None):
    ''' entrée : n est la longueur n du côté de l’échiquier
                 pos est la position pos du cavalier
                 nbp est le nombre de cases déjà parcourues (valant par défaut 1)
                 s est la matrice des successeurs (valant par défaut None).
        sortie : True et la matrice s complétée si un chemin permettant de passer une unique fois par toutes les cases a été trouvé
                 False et la matrice s incomplète sinon
    '''
    if nbp == n*n : return True, s
    else :
        if nbp == 1 : s=[[None for col in range(n)] for lg in range(n)]
        for dv in deplacements_valides_cavalier(n,pos):
            if s[dv[0]][dv[1]] == None :
                s[pos[0]][pos[1]] = dv
                b, s2 = parcours(n, dv, nbp+1, s)
                if b == True : return b, s2
                else : s[pos[0]][pos[1]] = None
        return False, s

def  affiche_successeurs(pos : tuple, s : list):
    ''' affiche la position du cavalier suivie de sa position suivante (contenue dans la case de s de coordonnées pos), et ainsi de suite jusqu’à ce que la position suivante soit None.
    '''
    print(pos, end=" ")
    suivant = s[pos[0]][pos[1]]
    if not(suivant is None) : affiche_successeurs(suivant, s)

if __name__ == "__main__" :
    print( deplacements_valides_cavalier(6, (4,3)) )
    print( deplacements_valides_cavalier(7, (1,1)) )
    for n in range(2,6) :
        b, s = parcours(n, (0,0))
        if b == True :
            print("Il existe un chemin pour n=", n)
            affiche_successeurs((0,0), s)

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.