from networkx import *
G=DiGraph() # Attention, le graphe est dirigé
G.add_node((0,0)) # Au début, deux récipients vides
def prochain_coup(a,b):
# Soit on vide a, soit on vide b, soit on remplit a, soit on remplit b X=[(0,b),(a,0),(3,b),(a,5)] # Il reste à envisager les deux derniers coups possibles. A=a B=b while A<3 and B>0: A+=1 B-=1 X.append((A,B)) A=a B=b while A>0 and B<5: A-=1 B+=1 X.append((A,B)) return X
def gagner(G):
# On gagne dès qu'un sommet a pour deuxième coordonnée 4 return len([k for k in G.nodes() if k[1]==4])>=1
def prochaine_profondeur(G):
L=[] for k in G.nodes(): for l in prochain_coup(k[0],k[1]): if l not in L: L.append((k,l)) for k in L: G.add_edge(k[0],k[1]) return G
while not gagner(G):
G= prochaine_profondeur(G)
import pylab as P
draw(G)
P.show()