Plus long chemin à partir d'un noeud donné dans un graphe cyclique

a marqué ce sujet comme résolu.

Bonjour, Je voulais savoir s’il y avait une manière simple de modifier un BFS afin de trouver le plus long chemin à partir d’un noeud donné (passant au plus une fois par le même noeud) dans un graphe pouvant comporter des cycles. J’ai pensé au code suivant mais qui ne fonctionne pas…

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
def bfs(lst):
    global etat,dist
    if lst == []:
        return
    nxt = []
    for i in range(0,len(lst)):
        if len(voisins(lst[i]))==0:
            etat[lst[i]]=0
        for elem in voisins(lst[i]):
            if etat[elem]!=1:
                etat[elem]=1
                nxt.append(elem)
                dist[elem]=max(dist[elem],dist[lst[0]]+1)
    bfs(nxt)

Merci d’avance pour vos réponses

+0 -0

Je dirais plutôt qu’il n’y à pas de solution. Si j’ai bien compris le problème, tu cherche à trouver le plus long chemin possible dans un graphe qui comporte des cycle. Si c’est le cas bah… tu peux bouclé à l’infini donc la solution serais un truc du genre $+\infty$

En général les problèmes de type "plus long chemin" se prêtent bien à un algorithme dynamique (en O(nombre de sommets)): le plus long chemin à partir d’un nœud à deux voisins, c’est le plus long du plus long chemin en passant par le premier voisin et du plus long chemin en passant par le second voisin.

La contrainte de ne pas passer deux fois par le même sommet, par contre, rend la question beaucoup plus difficile – l’algorithme dynamique perd l’information de par quel nœuds on est déjà passé, et la restaurer rend de nouveau l’algorithme exponentiel. Je pense qu’on peut montrer que ça rend le problème NP-complet ainsi: si tu sais calculer le plus long chemin entre deux nœuds sans repasser par le même sommet, alors tu sais décider s’il existe un chemin hamiltonien dans le graphe (il suffit de regarder si la taille du plus long chemin est le nombre de sommet du graphe), et ce problème est NP-complet.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte