def solve(input, print_graph=False, draw_graph=True): solution = Solution() infinity = INFINITY graph = Graph.from_text(input) if print_graph: graph.print_graph() if draw_graph: graph_copy = graph.copy_and_return() initial_node_number = graph.get_initial_node() dest_node_number = graph.get_dest_node() num_of_nodes = graph.get_num_of_nodes() k = graph.get_k() if initial_node_number > 0 and dest_node_number <= num_of_nodes: u = 0 pathToSelf = False found_path = False while u < k: if dest_node_number in graph.dict_nodes: dijkstra = Dijkstra( graph, graph.dict_nodes[initial_node_number].get_number(), graph.dict_nodes[dest_node_number].get_number()) if dijkstra.dict_distance_to_initial_node[ dest_node_number] < infinity and pathToSelf == False: print("Shortest Path " + str(u + 1) + ": " + str(dijkstra.minimunPathList)) print("Path Total Weight: " + str(dijkstra. dict_distance_to_initial_node[dest_node_number])) found_path = True solution.add_path( u + 1, dijkstra.minimunPathList, dijkstra. dict_distance_to_initial_node[dest_node_number]) graph.delete_minor_edge(dijkstra.minimunPathList) if dijkstra.dict_distance_to_initial_node[ dest_node_number] == 0: pathToSelf = True else: u = k if found_path: print("All Possible Paths Found") else: print("No paths found") u = u + 1 else: print("arguments 2 and 3 must be btween 1 and num of nodes") if draw_graph: plot_graph_and_sol(graph_copy, solution) return solution