Skip to content
Extraits de code Groupes Projets
Valider eb18ff4f rédigé par Louis Navarre's avatar Louis Navarre
Parcourir les fichiers

Add comments in main function

parent ac377f4d
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -20,15 +20,21 @@ def bellman_ford(links, s, verbose): ...@@ -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 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`. infinie pour chaque autre noeud, et une distance de 0 pour `s`.
""" """
# Initialisation.
dist = [math.inf] * nb_nodes dist = [math.inf] * nb_nodes
dist[s] = 0 # Le noeud source est à distance 0 de lui-meme. dist[s] = 0 # Le noeud source est à distance 0 de lui-meme.
path = [-1] * nb_nodes 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)): for j in range(len(links)):
node_from, node_to, cost = links[j][0], links[j][1], links[j][2] 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): if (dist[node_from] != math.inf and dist[node_to] > dist[node_from] + cost):
dist[node_to] = dist[node_from] + cost dist[node_to] = dist[node_from] + cost
path[node_to] = node_from path[node_to] = node_from
# Detection de cycle negatif.
for j in range(len(links)): for j in range(len(links)):
node_from, node_to, cost = links[j][0], links[j][1], links[j][2] 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): if (dist[node_from] != math.inf and dist[node_to] > dist[node_from] + cost):
...@@ -89,13 +95,15 @@ def read_graph(filename): ...@@ -89,13 +95,15 @@ def read_graph(filename):
links = [] links = []
for i in range(nb_edges): for i in range(nb_edges):
from_node = int.from_bytes(binary_data[i * 12:i * 12 + 4], "big", signed=True) from_node = int.from_bytes(
to_node = int.from_bytes(binary_data[i * 12 + 4:i * 12 + 8], "big", signed=True) 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( cost = int.from_bytes(
binary_data[i * 12 + 8:i * 12 + 12], "big", signed=True) binary_data[i * 12 + 8:i * 12 + 12], "big", signed=True)
l1 = [from_node, to_node, cost] l1 = [from_node, to_node, cost]
links.append(l1) links.append(l1)
return links return links
...@@ -108,7 +116,7 @@ if __name__ == "__main__": ...@@ -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.", 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) type=argparse.FileType("wb"), default=sys.stdout)
parser.add_argument( 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() args = parser.parse_args()
verbose = args.v verbose = args.v
...@@ -124,6 +132,9 @@ if __name__ == "__main__": ...@@ -124,6 +132,9 @@ if __name__ == "__main__":
for source in range(nb_nodes): for source in range(nb_nodes):
dist, path = bellman_ford(graph, source) 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: if output_fd == sys.stdout or output_fd == sys.stderr:
print("source : " + str(source)) print("source : " + str(source))
print("Distances: ", dist) print("Distances: ", dist)
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter