def execute_sched(self, graph): # Everyone buys cars at the beginning of the week self.maybe_buy_car() loc = self.sched[0] can_buy_car = True for dest in self.sched[1:]: path = graph.path(dest, loc) prev = loc for node in path[1:]: if graph.get_edge(prev, node) > self.tank: can_buy_car = False # TODO: Currently assumes it stops everywhere if graph.get_node(node).visit(): self.refuel() else: self.travel(prev, node) # Deduct fuel prev = graph.get_node(node) loc = dest if can_buy_car: self.can_buy_car = True
def _dfs(graph, visited, spanning_tree, pre, post, node): """ Depht-first search subfunction. @type graph: graph @param graph: Graph. @type visited: list @param visited: List of nodes (visited nodes are marked non-zero). @type spanning_tree: list @param spanning_tree: Spanning tree being built for the graph by DFS. @type pre: list @param pre: Graph's preordering @type post: list @param post: Graph's postordering @type node: number @param node: Node to be explored by DFS. """ visited[node] = 1 pre.append(node) # Explore recursively the connected component for each in graph.get_node(node): if (not visited[each]): spanning_tree[each] = node _dfs(graph, visited, spanning_tree, pre, post, each) post.append(node)
def breadth_first_search(graph): """ Breadth-first search. @type graph: graph @param graph: Graph. @rtype: list @return: Generated spanning_tree """ queue = [] # Visiting queue spanning_tree = [] # Spanning tree # Initialization for each in graph.get_nodes(): spanning_tree.append(-2) # -2 in spanning_tree means a non-visited node # Algorithm for each in graph.get_nodes(): if (spanning_tree[each] == -2): queue.append(each) spanning_tree[each] = -1 # -1 means that the node is the root of a tree while (queue != []): node = queue.pop(0) for other in graph.get_node(node): if (spanning_tree[other] == -2): queue.append(other) spanning_tree[other] = node return spanning_tree
def display(graph, steps=10, figure_texts=[], positions=None, callbacks={}): interface = create_visual_interface(graph, steps=steps, figure_texts=figure_texts, positions=positions, callbacks=callbacks) s = graph.get_node('s') interface.start()
def _dfs(graph, visited, count, node): """ Depht-first search subfunction adapted for accessibility algorithms. @type graph: graph @param graph: Graph. @type visited: list @param visited: List of nodes (visited nodes are marked non-zero). @type node: number @param node: Node to be explored by DFS. """ visited[node] = count # Explore recursively the connected component for each in graph.get_node(node): if (not visited[each]): _dfs(graph, visited, count, each)
def get_all_paths(graph, start_node_value, end_node_value): start_node = graph.get_node(start_node_value) end_node = graph.get_node(end_node_value) current_path = [start_node.value] return get_all_paths_helper(start_node, end_node, current_path, [])