Python - Emumerating all possibilities of a list with duplicates in it

50 views Asked by At

Hello there here's the problem : I have this code :

from graphes import Graphe

def permutations(liste):
    """
    Génère toutes les permutations d'une liste donnée.
    Entrée:
        liste (list): La liste à permuter.
    Sortie:
        list: Une liste de toutes les permutations possibles de la liste d'entrée.
    """
    # Si la liste d'entrée ne contient qu'un seul élément, retourner cette liste
    if len(liste) == 1:
        return [liste]
    else:
        result = []
        # Pour chaque élément dans la liste d'entrée
        for i in range(len(liste)):
            # Retirer l'élément actuel de la liste
            remaining_elements = liste[:i] + liste[i+1:]
            # Générer toutes les permutations des éléments restants
            for perm in permutations(remaining_elements):
                # Ajouter l'élément actuel à chaque permutation générée
                result.append([liste[i]] + perm)
        # Retourner la liste de toutes les permutations possibles
        return result
    

def generer_parcours(graphe):
    """
    Génère tous les chemins possibles à travers un graphe.
    Entrée:
        graphe (Graphe): Le graphe à parcourir.
    Sortie:
        list: Une liste de toutes les permutations possibles des sommets du graphe.
    """
    # Créer une liste de tous les sommets du graphe
    sommets = [i for i in range(graphe.taille)]
    # Créer une liste vide pour stocker tous les chemins possibles
    liste_parcours = []
    # Pour chaque sommet dans le graphe
    for i in range(graphe.taille):
        # Générer toutes les permutations des premiers i+1 sommets
        liste_parcours.append(permutations(sommets[:i+1]))
    # Retourner la liste de tous les chemins possibles
    return liste_parcours

liste_parcours is supposed to contain all possibilities of combinaitions of the sommets. But the problem is the list is composed of for example [0,1,2] and will return [[[0]], [[0, 1], [1, 0]], [[0, 1, 2], [0, 2, 1], [1, 0, 2], [1, 2, 0], [2, 0, 1], [2, 1, 0]] but it's missing things like [1,1,1] the numbers never repeat, removing a lot of possibilities... Please help thanks!

I tried changing my function but i don't know how to solve this

0

There are 0 answers