Bonjour,
Je suis débutant en Python et j'ai un problème dans mon code que voici :
# *-coding:Utf-8 -*
class vertex:
def __init__(self, name, value):
self.name = name
self.buddies = dict()
self.value = value
def __str__(self):
return str(self.name)
class Graph:
def __init__(self, name, vertices):
self.vertices = vertices
self.name = name
def Dijkstra(G, source):
sPaths = [(float('inf'), None)]*len(G.vertices)
sPaths[source.value] = 0
pivot = source
papas = [None]*len(G.vertices)
done = []
while len(done) != (len(G.vertices)-1):
for buddy in pivot.buddies.keys():
if(sPaths[buddy.value] > sPaths[pivot.value] + pivot.buddies[buddy]):
sPaths[buddy.value] = sPaths[pivot.value] + pivot.buddies[buddy]
papas[buddy.value] = pivot
done.append(pivot)
for path in sPaths:
if path[0] == min(sPaths)[0]:
pivot = path[1]
for path in sPaths:
print("distance de "+str(source)+"à "+ str(path[1])+"= "+path[0]+"\n")
A = vertex("A", 0)
B = vertex("B", 1)
C = vertex("C", 2)
D = vertex("D", 3)
E = vertex("E", 4)
S = vertex("S", 5)
E.buddies = {A:3, B:1}
A.buddies = {E:3, B:1, C:3}
B.buddies = {E:1, A:1, C:3, D:5}
C.buddies = {A:3, B:3, D:1, S:3}
D.buddies = {B:5, C:1, S:1}
G = Graph("G", [A, B, C, D, E, S])
Dijkstra(G,E)
Le rapport d'erreur est le suivant :
File "Dijkstra.py", line 61, in <module>
Dijkstra(G,E)
File "Dijkstra.py", line 39, in Dijkstra
if path[0] == min(sPaths)[0]:
TypeError: 'int' object has no attribute '__getitem__'
Je suis désolé par avance si la solution est évidente mais j'ai fait des tests intermédiaires et a priori la méthode min renvoie bien un tuple alors je ne comprends pas pourquoi min(sPaths)[0] renvoie une erreur. Merci à tous ceux qui prendront le temps de réfléchir à mon problème.
Cordialement
Partager