permet de dire que nous voulons produire un dictionnaire dans ce format:
Graph = { 'Node11': [[ 'Node12': 0,7], [], ..., []] # pour attribuer une seule valeur de liste à chaque clé dans le dictionnaire
}
et que Traveltime est une liste de 8 * 16 valeurs.
Nous pouvons travailler à peu près avec la construction de chaînes de ce dictionnaire. Cela peut être une solution:
t = TravelTime
movements = [(0,1),(1,1),(1,0),(1,-1),(0,-1),(-1,-1),(-1,0),(-1,1)] # the order of movements described by you
output = '{'
for i in range(1,5):
for j in range(1,5):
output+="\n'Node"+str(i)+str(j)+"': [" #the key in the dictionary
for k in range(8):
output+="["+"'Node"+str(i+movements[k][0])+str(j+movements[k][1])+"', "+str(t[((i+j)-2)*8+k])+"]," #the value of dictonary
output=output[:-1]+'],' # remove last comma and close the list bracket
output=output[:-1]+'\n}' #remove last comma and insert last dictionary bracket
Graph = eval(output) # last step to use Graph as a dictionary
il sort quelque chose comme (avec 8 fois d'entrée répétée):
{'Node11': [['Node12', 0.7], ['Node22', 0.5], ['Node21', 10000], ['Node20', 0.5], ['Node10', 0.7], ['Node00', 1.6], ['Node01', 1.3], ['Node02', 1.6]], 'Node13': [['Node14', 0.7], ['Node24', 0.5], ['Node23', 10000], ['Node22', 0.5], ['Node12', 0.7], ['Node02', 1.6], ['Node03', 1.3], ['Node04', 1.6]], 'Node12': [['Node13', 0.6], ['Node23', 0.5], ['Node22', 0.6], ['Node21', 0.9], ['Node11', 0.6], ['Node01', 0.5], ['Node02', 10000], ['Node03', 10000]], 'Node14': [['Node15', 0.6], ['Node25', 0.5], ['Node24', 0.6], ['Node23', 0.9], ['Node13', 0.6], ['Node03', 0.5], ['Node04', 10000], ['Node05', 10000]], 'Node24': [['Node25', 0.7], ['Node35', 0.5], ['Node34', 10000], ['Node33', 0.5], ['Node23', 0.7], ['Node13', 1.6], ['Node14', 1.3], ['Node15', 1.6]], 'Node32': [['Node33', 0.6], ['Node43', 0.5], ['Node42', 0.6], ['Node41', 0.9], ['Node31', 0.6], ['Node21', 0.5], ['Node22', 10000], ['Node23', 10000]], 'Node31': [['Node32', 0.7], ['Node42', 0.5], ['Node41', 10000], ['Node40', 0.5], ['Node30', 0.7], ['Node20', 1.6], ['Node21', 1.3], ['Node22', 1.6]], 'Node21': [['Node22', 0.6], ['Node32', 0.5], ['Node31', 0.6], ['Node30', 0.9], ['Node20', 0.6], ['Node10', 0.5], ['Node11', 10000], ['Node12', 10000]], 'Node22': [['Node23', 0.7], ['Node33', 0.5], ['Node32', 10000], ['Node31', 0.5], ['Node21', 0.7], ['Node11', 1.6], ['Node12', 1.3], ['Node13', 1.6]], 'Node23': [['Node24', 0.6], ['Node34', 0.5], ['Node33', 0.6], ['Node32', 0.9], ['Node22', 0.6], ['Node12', 0.5], ['Node13', 10000], ['Node14', 10000]], 'Node33': [['Node34', 0.7], ['Node44', 0.5], ['Node43', 10000], ['Node42', 0.5], ['Node32', 0.7], ['Node22', 1.6], ['Node23', 1.3], ['Node24', 1.6]], 'Node44': [['Node45', 0.7], ['Node55', 0.5], ['Node54', 10000], ['Node53', 0.5], ['Node43', 0.7], ['Node33', 1.6], ['Node34', 1.3], ['Node35', 1.6]], 'Node34': [['Node35', 0.6], ['Node45', 0.5], ['Node44', 0.6], ['Node43', 0.9], ['Node33', 0.6], ['Node23', 0.5], ['Node24', 10000], ['Node25', 10000]], 'Node42': [['Node43', 0.7], ['Node53', 0.5], ['Node52', 10000], ['Node51', 0.5], ['Node41', 0.7], ['Node31', 1.6], ['Node32', 1.3], ['Node33', 1.6]], 'Node43': [['Node44', 0.6], ['Node54', 0.5], ['Node53', 0.6], ['Node52', 0.9], ['Node42', 0.6], ['Node32', 0.5], ['Node33', 10000], ['Node34', 10000]], 'Node41': [['Node42', 0.6], ['Node52', 0.5], ['Node51', 0.6], ['Node50', 0.9], ['Node40', 0.6], ['Node30', 0.5], ['Node31', 10000], ['Node32', 10000]]}
bien sûr ici il y a 5 et 0 nœuds qui pourrait être atteint au bord.
Merci beaucoup. Le problème est que je vais maintenant visiter des nœuds comme Node55, dont je n'ai pas de données et je ne peux pas me rendre à un nœud en dehors de ma carte. Par exemple, 'Node44' est un noeud de coin et ne doit pas visiter d'autres noeuds que Node43, Node33 et Node 34. Peut-être devrais-je ajouter une if-statement à votre fonction? – Scirocco
Oui, vous pouvez le faire. Je l'ai fait de cette façon parce que vous avez dit que vous avez une entrée de 8 * 16 éléments, donc vous avez toujours 8 valeurs pour chaque nœud et le premier, par exemple, se réfère à un externe. Sur la bordure, vous pouvez simplement affecter une valeur infinie, par exemple de Node44 à Node45. Cette fonction est utile pour vous, il suffit de l'adapter à votre saisie;) Ciaoo – caporiccirob