def mystere(graphe, s, n, ouverts, fermes, resultat):
""" Paramètres :
graphe un graphe représenté par une matrice d'adjacence
s l'indice d'un sommet du graphe
n le nombre de sommets du graphe
ouverts une liste de booléens permettant de savoir
si le traitement d'un sommet a été commencé
fermes une liste de booléens permettant de savoir
si le traitement d'un sommet a été terminé
Retour : False s'il y a eu un "problème", True sinon.
Le paramètre resultat sera modifié ultérieurement.
"""
if ouverts[s]:
return False
if not fermes[s]:
ouverts[s] = True
for i in range(n):
if graphe[s][i] == 1:
val = mystere(graphe, i, n, ouverts, fermes, resultat)
if not val:
return False
ouverts[s] = False
fermes[s] = True
# ...
return True