Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
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)
Exemple #4
0
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
Exemple #5
0
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()
Exemple #6
0
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, [])