Exemple #1
0
inline connected_components_t<Entity>
connected_components(const std::vector<Entity>& entities, FNeigh&& get_neighbors, FCompPred&& in_component, FPred&& valid_start) {
    std::set<Entity> todo(entities.begin(), entities.end()), visited;

    connected_components_t<Entity> components;
    while (visited.size() < todo.size()) {
        // find first unvisited entity
        Entity start = *std::find_if(todo.begin(), todo.end(), [&] (Entity entity) { return visited.find(entity) == visited.end(); });
        if (!valid_start(start)) {
            visited.insert(start);
            continue;
        }

        connected_component_t<Entity> component;
        traverse(
            start,
            std::forward<FNeigh>(get_neighbors),
            [&] (Entity entity) {
                return in_component(entity, start);
            },
            [&] (Entity entity) {
                component.push_back(entity);
                visited.insert(entity);
            },
            false
        );
        components.push_back(component);
    }

    return components;
}
Exemple #2
0
void			resolve(t_list *list, int ant)
{
	int			value;
	t_list		*l;

	l = list;
	value = 1;
	init_dist(list);
	valid_start(list);
	((t_salle*)list->content)->dist = 0;
	give_value((t_salle*)list->content);
	while (l != NULL)
	{
		if (((t_salle *)l->content)->name[0] == 'L')
			ft_error();
		l = l->next;
	}
	if (ant <= 0)
		ft_error();
	omg(list, value, ant);
}