Jul 03, 2024

Wiki

Python

Aide

edit SideBar

Search

Solution du problème des récipients


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()

Page Actions

Recent Changes

Group & Page

Back Links