/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* push_ants.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/04/06 11:37:56 by tmaze #+# #+# */ /* Updated: 2019/04/15 17:48:01 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "lem_in.h" static void clean_ants(t_ants **ants) { t_ants *it; t_ants *tmp; while (*ants && (*ants)->end) { tmp = *ants; *ants = (*ants)->next; ft_memdel((void**)&tmp); } it = *ants; while (it && it->next) { if (it->next->end) { tmp = it->next; it->next = tmp->next; ft_memdel((void**)&tmp); } else it = it->next; } } static void print_ants(t_lmdata *data, t_ants **ants, t_path *paths) { t_ants *it; it = *ants; while (it) { ft_printf("L%d-%s", it->nb_ant, get_node(data, it->nb_node)->name); if (get_node_path(paths[it->nb_path].nodes, it->nb_node) && get_node_path(paths[it->nb_path].nodes, it->nb_node)->next) it->nb_node = get_node_path(paths[it->nb_path].nodes , it->nb_node)->next->index; else it->end = 1; if (it->next) ft_putchar(' '); else ft_putchar('\n'); it = it->next; } clean_ants(ants); } int push_ants(t_lmdata *data, t_path *paths) { t_ants *ants; t_ants *it; t_node *node; int i; int ant_c; ant_c = 1; ants = NULL; while ((ants || ant_c <= data->nbants) && (i = -1)) { it = ants; while (it) { node = get_node(data, it->nb_node); if (node && node->next) it->nb_node = node->next->ind; it = it->next; } while (paths[++i].nodes) if (ant_c <= data->nbants && paths[i].nb_ants) { if (!add_ant(&ants, ant_c, i, paths)) del_ants(&ants); if (!ants) return (0); ant_c++; paths[i].nb_ants--; } print_ants(data, &ants, paths); } return (1); }