Labyrinthe mon programme ne marche pas

Fermé
DEMS - Modifié le 2 nov. 2021 à 20:27
Pierrecastor Messages postés 41474 Date d'inscription mercredi 5 novembre 2003 Statut Modérateur Dernière intervention 18 janvier 2025 - 2 nov. 2021 à 20:28
Bonjour,

Un labyrinthe peut-être représenté à l’aide d’une matrice carrée de la forme : Mn,n, on décide que la valeur 1 indique un mur et que la valeur 0 indique un couloir, les seuls mouvements possibles sont a droite et en bas.
j'ai créé une petite fonction qui devrait compter le nombre de chemins possible différents pour aller de la case en haut a gauche (0,0) à la case en bas à gauche(n-1,n-1) pour n=4, Dans mon cas il y'a deux murs, un en bas a droite de la case (0,0) soit en (1,1) et un autre en bas en bas de (0,0) soit en (2,0).
(Je tiens juste a préciser que ma fonction n'est pas vraiment faite pour fonctionner en fonction de n mais plus pour ce cas précis qui est : matrice carrée de coté 4 et les deux murs)
Petit problème, ca ne marche pas, le programme tourne à l'infini, j'ai essayé de résoudre le problème pendant très longtemps mais je n'y arrive pas.
voici mon programme:

def laby4x4(n):
    m=[4*[0]+[1]]+[4*[0]+[1]]+[4*[0]+[1]]+[4*[0]+[1]]+[5*[1]]        #Creation de la matrice pour 4 de coté
    m[1][1],m[2][0]=1,1
    a=True
    nb=0       #nb de chemin diffèrent possible
    l=0        #lignes (0,1,2,3...)
    c=0         #colonnes
    i=0
    P=[-1]*(2*(n-1))       #tableau pour calculer la profondeur descendue (en lignes) la première fois que la matrice est descendu
    while a==True:
        w=True
        P=[-1]*(2*n-1)
        l,c,i=0,0,0                 #l(lignes) c(colonnes) i(itérateur du tableau P)
        if m[1][0]==1 and m[0][1]==1 :  # si mur en bas et a droite
            a=False
        while w==True:
            if c==3 and l==3:  #si arriver tt en bas a gauche
                nb+=1                # +1 chemin
                m[maxPronfondeur(P,i,0)][maxPronfondeur(P,i,1)]=1
                w=False
                print("a")
            else:
                if m[l+1][c]==1:        #si mur en bas
                    if m[l][c+1]==1:    # et si mur a droite recommencer a (0,0) et griser la case pour ne plus y revenir
                        m[c][l]=1
                        w=False

                    else:               # si pas de mur a droite sachant que mur en bas , aller a droite
                        c+=1
                        P[i]=1
                        i+=1
                else:                   #si pas de mur en bas, aller en bas
                    l+=1
                    P[i]=0
                    i+=1
    return nb


def maxPronfondeur(t,n,a):
    p=0
    c=0
    for i in range(n):
        if t[i]==0:
            p+=1
        else:
            if p==0:
                c+=1
            else:
                if a==0:
                    return p
                else:
                    return c
    if a==0:
        return p
    else:
        return c

#0  0  0  0  1
#0  1  0  0  1
#1  0  0  0  1
#0  0  0  0  1
#1  1  1  1  1

Merci d'avance pour votre temps et vos réponses.

Configuration: Windows / Chrome 95.0.4638.54

1 réponse

Pierrecastor Messages postés 41474 Date d'inscription mercredi 5 novembre 2003 Statut Modérateur Dernière intervention 18 janvier 2025 4 145
2 nov. 2021 à 20:28
Salut,

Pour de prochaine questions ou partage de code, bien penser à utilisé les balises correspondantes au langage en cliquant sur la petite flèche à droite des chevrons.

Parce que lire du code sans coloration syntaxique, c'est pas pratique.

Bien castorement

Pierre.
0