solution aux problèmes de transvasement

Problème à 2 bidons: AB = 5L, 3L

Le tableau de correspondance numero_sommet <-> volumes AB peut être mis sous forme d’un dictionnaire: (voir le schéma avec la position des sommets sur la page enoncé)

diagramme triangulaire des états de remplissage

diagramme triangulaire des états de remplissage

# Correspondance numero_sommet : volumes AB
tab = { 1: (0,0),
        2: (1,0),
        3: (2,0),
        4: (3,0),
        5: (4,0),
        6: (5,0),
        7: (5,1),
        8: (5,2),
        9: (5,3),
        10: (4,3),
        11: (3,3),
        12: (2,3),
        13: (1,3),
        14: (0,3),
        15: (0,2),
        16: (0,1)
        }

Le graphe peut être représenté à l’aide d’une matrice de sommets successeurs:

états numérotés à la manière d'un graphe

états numérotés à la manière d'un graphe

# Graphe des sommets voisins à volume non constant
G = {1:[6,14],
    2:[1,6,13,16],
    3:[1,6,12,15],
    4:[1,6,11,14],
    5:[1,6,10,13],
    6:[1,9,12],
    7:[6,9,16],
    8:[6,10,15],
    9:[6,14],
    10:[5,8,9,14],
    11:[4,7,9,14],
    12:[3,6,9,14],
    13:[2,5,9,14],
    14:[1,4,9],
    15:[1,3,8],
    16:[1,2,7]
    }

Utiliser alors le script python de la page enoncé pour définir la matrice d’adjacence.

Le plus court chemin nécessite 6 transvasements. Il s’agit de: 1=>6=>12=>3=>15=>8=>10

Remplacer les numéros de sommets par les volumes AB pour déduire les transvasements:

  • On part d’un état 1, de coordonnées (0,0), c’est à dire avec 2 bidons vides.
  • On va à l’état 2, de coordonnées (5,0): on remplit le grand bidon avec 5L.
  • On va à l’état 12, de coordonnées (2,3): on verse de l’eau du grand bidon vers le petit, jusqu’à remplir celui-ci à ras bord.

Problème à 3 bidons: ABC = 5L, 3L, 8L

Cette fois, les volumes sont repérés par 3 valeurs ABC. La somme des volumes est toujours egale à 8, car il n’y a ni vidange ni remplissage.

Le tableau de correspondance numero_sommet <-> volumes ABC est:

tab = {1: '008',
        2:'107',
        3:'206',
        4:'305',
        5:'404',
        6:'503',
        7:'512',
        8:'521',
        9:'530',
        10:'431',
        11:'332',
        12:'233',
        13:'134',
        14:'035',
        15:'026',
        16:'017'
    } 

Le graphe est identique au précedent. Réutiliser le dictionnaire G. Pour le parcours, le sommet de depart est le 1, tel que ABC = (0,0,8); celui d’arrivée est le 4, ABC = (4,0,4)