Exercice 18
This commit is contained in:
parent
dccae18004
commit
afc847797a
|
@ -277,5 +277,28 @@ def genere_labirinthe_aleatoire(nb_salles, max_aretes):
|
||||||
|
|
||||||
return l
|
return l
|
||||||
|
|
||||||
print(genere_labirinthe_aleatoire(10, 10).montrer())
|
#print(genere_labirinthe_aleatoire(10, 10).montrer())
|
||||||
|
|
||||||
|
def inside(x, y, nb_salles):
|
||||||
|
return x >= 0 and x < nb_salles and y >= 0 and y < nb_salles
|
||||||
|
|
||||||
|
def vrai_labyrinthe(nb_salles):
|
||||||
|
if nb_salles % 2 == 0: nb_salles += 1
|
||||||
|
nodes = [[x % 2 == 0 or y % 2 == 0 for x in range(nb_salles)] for y in range(nb_salles)]
|
||||||
|
visited = set([(1, 1)])
|
||||||
|
stack = [(1, 1)]
|
||||||
|
while stack:
|
||||||
|
x, y = stack[-1]
|
||||||
|
directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]
|
||||||
|
directions = [(dx, dy) for dx, dy in directions if inside(x+dx*2, y+dy*2, nb_salles)]
|
||||||
|
directions = [(dx, dy) for dx, dy in directions if (x+dx*2, y+dy*2) not in visited]
|
||||||
|
if not directions:
|
||||||
|
stack.pop()
|
||||||
|
else:
|
||||||
|
dx, dy = choice(directions)
|
||||||
|
nodes[x+dx][y+dy] = False
|
||||||
|
stack.append((x+dx*2, y+dy*2))
|
||||||
|
visited.add((x+dx*2, y+dy*2))
|
||||||
|
return Labyrinthe([[Salle(node) for node in row] for row in nodes], (1, 1), (nb_salles-2, nb_salles-2))
|
||||||
|
|
||||||
|
print(vrai_labyrinthe(40).montrer())
|
||||||
|
|
Loading…
Reference in a new issue