IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Memory error sur un script de résolution de labyrinthe


Sujet :

Python

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Memory error sur un script de résolution de labyrinthe
    Bien le bonjour en ce dernier jour de l'année !

    La suite des péripéties de mon labyrinthe... J'ai souhaité créé un script de résolution de labyrinthe moi-même en me basant un peu sur l'idée d'un autre script, afin de vérifier que je n'ai bien qu'un seul chemin suite aux nombreuses modifications que j'ai apporté à ce labyrinthe sidewinder.
    J'ai utilisé un système de récursion puisque c'est plus simple pour ma petite tête, mais voilà autant avec un petit labyrinthe ça marche, autant avec un gros ça plante !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    file = open("Maze.txt","r")
    area = file.read().replace(',','').splitlines()
    file.close()
    air = [[int(x) for x in line] for line in area]
     
    import sys, time
     
    sys.setrecursionlimit(10000)
     
    '''air = [[0,1,0,0,0,0,0,0,0],
            [0,1,0,0,1,1,1,1,0],
            [0,1,0,1,1,0,0,1,0],
            [0,1,1,1,0,1,1,1,0],
            [0,1,0,0,0,1,0,1,0],
            [0,1,1,1,1,1,1,1,0],
            [0,1,0,1,0,0,0,1,0],
            [0,0,0,0,0,0,0,1,0]]'''
     
    area = [l.copy() for l in air]
     
    start = (0,1)
    end = (len(area)-1,len(area[-1])-2)
     
    def print_area(tableau):
        for line in tableau:
            print(line)
        print('---------------')
        time.sleep(0.5)
     
    path = []
    def find_way(x, y):
        global path
        path.append((x, y))
        for X, Y in ((x+i, y+I) for i in range(-1,2) for I in range(-1,2) if (i,I) != (0, 0) and (not i or not I)):
            if area[X][Y]==area[x][y]-1 and X >= 0 and Y >= 0 and area[X][Y]:            
                find_way(X, Y)
                break
     
     
    def next_step(x,y,pcds,visited,k=2):
        visited_copy = visited.copy()
        for X, Y in ((x+i, y+I) for i in range(-1,2) for I in range(-1,2) if (i,I) != (0, 0) and (not i or not I)):
            if (X, Y) != pcds :
                try:
                    if area[X][Y]:
                        if (X,Y) not in visited_copy:
                            visited_copy.append(pcds)
                            area[X][Y]=k
                            #print_area(area)                    
                            next_step(X,Y,(x, y),visited_copy,k+1)                    
                except IndexError:
                    print('bug :',X,Y)
                    pass
     
     
    print(time.ctime())
    next_step(start[0], start[1], start, [])
     
    #print_area(air)
    #print_area(area)
    find_way(end[0], end[1])
    for x, y in path:
        air[x][y] = 9
    #print_area(air)
     
    with open("Maze_solved.txt","w") as file:
        for line in air:
            file.write(str(line)[1:-1].replace(',',''))
            file.write('\n')
    Voici le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    File "C:\Users\toto\Desktop\Scripts\K_GAME\solver.py", line 50, in next_step
        next_step(X,Y,(x, y),visited_copy,k+1)
      [Previous line repeated 1955 more times]
      File "C:\Users\toto\Desktop\Scripts\K_GAME\solver.py", line 47, in next_step
        visited_copy.append(pcds)
    MemoryError
    Que se passe-t-il avec ces listes ?
    Restent-elles en mémoire jusque la fin du programme et sature la RAM ?
    Est-ce que c'est mon code qui est mal fichu (fortement probable) ?

    Et finalement comment utiliser sa propre pile plutôt que de la récursion sans tourner en rond ? (Ce qui est peut-être déjà le cas avec mon script, j'ai fais juste quelques petits tests)

    Merci et bon réveillon ou bonne année si vous lisez ceci début 2022. 🥳
    Dernière modification par Invité ; 31/12/2021 à 14h38.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/08/2019, 17h45
  2. error message sur un script
    Par miroufsn dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2007, 08h14
  3. Script error sur envoi de formulaire sous IE
    Par loick2000 dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 14/05/2007, 17h30
  4. Question sur un script
    Par Gnux dans le forum Linux
    Réponses: 8
    Dernier message: 07/07/2005, 17h03
  5. installation sur serveur + script
    Par liliprog dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/08/2004, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo