2016-07-31 16 views
-3

Ich habe eine Liste wie folgt aus: a =[1,2,3,4]den kürzesten Weg zwischen zwei Punkten in einer zirkularen Liste in Python finden

Die Liste ist eine kreisförmige Liste. Die Werte in der Liste repräsentieren keine Knoten, aber der Index der Liste repräsentieren Knoten. So kann die Liste doppelte Elemente enthalten. Beispiel

if i take index (1,3) 
(ie source is at index 1,and destination is at index 3) . 
the shortest path is 1->4 

if i take index (0,2) , i get two shortest paths 
1->2->3 and 
1->4->3 

Wie kann ich vorgehen dies in Python?

+1

ein Tutorial lesen. – Julien

+2

Was hast du schon probiert? – DeepSpace

+2

Hier ist eine Sache zu beachten: * In einer Liste ohne Duplikate * ist der kürzeste Weg zwischen zwei Punkten in Ihrer kreisförmigen Liste gleich dem kleineren von (a) dem kürzesten Pfad, der nicht "loop", und (b) dem kürzester Weg, der das tut. Sie sollten in der Lage sein, diese Logik zu erweitern, um den Fall zu behandeln, in dem der Knoten wiederholt werden kann. – jedwards

Antwort

0

Sieht aus, dass das ist, was Sie wollen:

L = [1, 2, 3, 4, 5, 6] 
a = L[1] 
b = L[3] 
cnt1 = [] 
cnt2 = [] 
for x in range(L.index(a), L.index(b) + 1): 
    cnt1.append(L[x]) 
for x in range(L.index(a), L.index(b) -(len(L) + 1), -1): 
    cnt2.append(L[x]) 

if len(cnt1) <= len(cnt2): 
    print(cnt1) 
else: 
    print(cnt2)