diff --git a/sp.py b/sp.py index da782f6c10ae25b88e472586926cd4355ed99945..ab4c747148f74c77037cca311358d1ca8d29051b 100644 --- a/sp.py +++ b/sp.py @@ -20,15 +20,21 @@ def bellman_ford(links, s, verbose): Si le noeud est isolé ou qu'un cycle négatif est trouvé, retourne une distance infinie pour chaque autre noeud, et une distance de 0 pour `s`. """ + + # Initialisation. dist = [math.inf] * nb_nodes dist[s] = 0 # Le noeud source est à distance 0 de lui-meme. path = [-1] * nb_nodes - for _ in range(nb_nodes-1): # Iteration de Bellman-Ford. + + # Iteration de Bellman-Ford. + for _ in range(nb_nodes-1): for j in range(len(links)): node_from, node_to, cost = links[j][0], links[j][1], links[j][2] if (dist[node_from] != math.inf and dist[node_to] > dist[node_from] + cost): dist[node_to] = dist[node_from] + cost path[node_to] = node_from + + # Detection de cycle negatif. for j in range(len(links)): node_from, node_to, cost = links[j][0], links[j][1], links[j][2] if (dist[node_from] != math.inf and dist[node_to] > dist[node_from] + cost): @@ -89,13 +95,15 @@ def read_graph(filename): links = [] for i in range(nb_edges): - from_node = int.from_bytes(binary_data[i * 12:i * 12 + 4], "big", signed=True) - to_node = int.from_bytes(binary_data[i * 12 + 4:i * 12 + 8], "big", signed=True) + from_node = int.from_bytes( + binary_data[i * 12:i * 12 + 4], "big", signed=True) + to_node = int.from_bytes( + binary_data[i * 12 + 4:i * 12 + 8], "big", signed=True) cost = int.from_bytes( binary_data[i * 12 + 8:i * 12 + 12], "big", signed=True) l1 = [from_node, to_node, cost] links.append(l1) - + return links @@ -108,7 +116,7 @@ if __name__ == "__main__": parser.add_argument("-f", help="chemin vers le fichier qui contiendra le resultat de programme, au format specifie dans l'enonce. Defaut : stdout.", type=argparse.FileType("wb"), default=sys.stdout) parser.add_argument( - "-v", help="autorise les messages de debug. Si ce n'est pas active, aucun message de ce type ne peut etre affiche, excepte les messages d'erreur en cas d'echec. Defaut : false.", action="store_true") + "-v", help="autorise les messages de debug. Si ce n'est pas active, aucun message de ce type ne peut etre affiche, excepte les messages d'erreur en cas d'echec. Defaut : False.", action="store_true") args = parser.parse_args() verbose = args.v @@ -124,6 +132,9 @@ if __name__ == "__main__": for source in range(nb_nodes): dist, path = bellman_ford(graph, source) + # Ces messages ne sont pas des messages de debug. + # Ils peuvent donc etre affiches (uniquement si la sortie choisie est stdout ou stderr) + # meme si le mode verbose n'est pas actif. if output_fd == sys.stdout or output_fd == sys.stderr: print("source : " + str(source)) print("Distances: ", dist)