récupération de la liste des villes (sans doublons)
vil = { } for row in df.values : vil [row[0]] = 0 vil [row[1]] = 1 vil = list(vil.keys()) print (len(vil))
construction d'un dictionnaire { (a,b):d, (b,a):d }
dist = { } for row in df.values : a = row[0] b = row[1] dist[a,b] = dist[b,a] = row[2] print (len(dist))
distance Charleville-Mezieres --> Bordeaux
print ( dist["Charleville-Mezieres","Bordeaux"] )
initialisation du tableau d
d = { } d['Charleville-Mezieres'] = 0 for v in vil : d[v] = 1e10 for v,w in dist : if v == 'Charleville-Mezieres': d[w] = dist[v,w]
une itération de l'algorithme de Dikjstra
for v,w in dist : d2 = d[v] + dist[v,w] if d2 < d[w] : d[w] = d2
l'algorithme de Dikjstra
for i in range(0,len(d)) : for v,w in dist : d2 = d[v] + dist[v,w] if d2 < d[w] : d[w] = d2
coût de la meilleure distribution des skis
p = { } p [-1,-1] = 0 for n,taille in enumerate(skieurs) : p[n,-1] = p[n-1,-1] + taille for m,paire in enumerate(paires ) : p[-1,m] = 0 for n,taille in enumerate(skieurs) : for m,paire in enumerate(paires) : p1 = p.get ( (n ,m-1), 1e10 ) p2 = p.get ( (n-1,m-1), 1e10 ) + abs(taille - paire) p[n,m] = min(p1,p2) print (p[len(skieurs)-1,len(paires)-1])
récupération de la meilleure distribution
p = { } p [-1,-1] = 0 best = { } for n,taille in enumerate(skieurs) : p[n,-1] = p[n-1,-1] + taille for m,paire in enumerate(paires ) : p[-1,m] = 0 for n,taille in enumerate(skieurs) : for m,paire in enumerate(paires) : p1 = p.get ( (n ,m-1), 1e10 ) p2 = p.get ( (n-1,m-1), 1e10 ) + abs(taille - paire) p[n,m] = min(p1,p2) if p[n,m] == p1 : best [n,m] = n,m-1 else : best [n,m] = n-1,m-1 print (p[len(skieurs)-1,len(paires)-1]) chemin = [ ] pos = len(skieurs)-1,len(paires)-1 while pos in best : print (pos) chemin.append(pos) pos = best[pos] chemin.reverse() print (chemin)