thinking of how to display the ants moving and optimise by moving at least one on each path
188 lines
4.4 KiB
C
188 lines
4.4 KiB
C
/* ************************************************************************** */
|
|
/* */
|
|
/* ::: :::::::: */
|
|
/* test.c :+: :+: :+: */
|
|
/* +:+ +:+ +:+ */
|
|
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
|
|
/* +#+#+#+#+#+ +#+ */
|
|
/* Created: 2019/03/28 11:37:06 by tmaze #+# #+# */
|
|
/* Updated: 2019/04/05 17:43:06 by tmaze ### ########.fr */
|
|
/* */
|
|
/* ************************************************************************** */
|
|
|
|
#include "lem_in.h"
|
|
|
|
#define NB_NODES 8
|
|
#define NB_ANTS 20
|
|
|
|
int add_link(t_lmdata *data, int n1, int n2)
|
|
{
|
|
return (lst_indadd(&(data->adj[n1]), n2) && lst_indadd(&(data->adj[n2]), n1));
|
|
}
|
|
|
|
t_node *get_node(t_lmdata *data, int index)
|
|
{
|
|
t_node *it;
|
|
|
|
it = data->node_data;
|
|
while (it && it->index != index)
|
|
it = it->next;
|
|
return (it);
|
|
}
|
|
|
|
void push_ants(t_lmdata *data, t_ind **paths, int nb_paths, int nb_ants)
|
|
{
|
|
t_ind *its[nb_path];
|
|
int ant_p[nb_path];
|
|
int ant_c;
|
|
int i;
|
|
char end;
|
|
|
|
i = 0;
|
|
end = 0;
|
|
while (i < nb_paths)
|
|
{
|
|
its[i] = paths[i];
|
|
i++;
|
|
}
|
|
ant_c = 0;
|
|
while (++ant_c <= nb_paths)
|
|
ant_p[ant_c - 1] = ant_c]
|
|
while (!end)
|
|
{
|
|
i = 0;
|
|
while (i < nb_paths)
|
|
{
|
|
ft_printf("L%d-%s", ant_p[i], get_node(data, its[i]->index)->name);
|
|
if (i < nb_path - 1)
|
|
ft_putchar(' ');
|
|
i++;
|
|
}
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
t_lmdata data;
|
|
t_ind **path;
|
|
t_ind *it;
|
|
int i;
|
|
|
|
data.nb_nodes = NB_NODES;
|
|
if ((data.adj = (t_ind**)ft_memalloc(sizeof(t_ind*) * NB_NODES)) == NULL)
|
|
return (1);
|
|
if (!add_link(&data, 0, 1) || !add_link(&data, 0, 2))
|
|
{
|
|
lst_inddel(&(data.adj[2]));
|
|
lst_inddel(&(data.adj[1]));
|
|
lst_inddel(&(data.adj[0]));
|
|
ft_memdel((void**)&(data.adj));
|
|
return (1);
|
|
}
|
|
if (!add_link(&data, 1, 4))
|
|
{
|
|
lst_inddel(&(data.adj[2]));
|
|
lst_inddel(&(data.adj[1]));
|
|
lst_inddel(&(data.adj[0]));
|
|
ft_memdel((void**)&(data.adj));
|
|
return (1);
|
|
}
|
|
if (!add_link(&data, 2, 3) || !add_link(&data, 2, 5))
|
|
{
|
|
lst_inddel(&(data.adj[4]));
|
|
lst_inddel(&(data.adj[3]));
|
|
lst_inddel(&(data.adj[2]));
|
|
lst_inddel(&(data.adj[1]));
|
|
lst_inddel(&(data.adj[0]));
|
|
ft_memdel((void**)&(data.adj));
|
|
return (1);
|
|
}
|
|
if (!add_link(&data, 3, 6))
|
|
{
|
|
lst_inddel(&(data.adj[5]));
|
|
lst_inddel(&(data.adj[4]));
|
|
lst_inddel(&(data.adj[3]));
|
|
lst_inddel(&(data.adj[2]));
|
|
lst_inddel(&(data.adj[1]));
|
|
lst_inddel(&(data.adj[0]));
|
|
ft_memdel((void**)&(data.adj));
|
|
return (1);
|
|
}
|
|
if (!add_link(&data, 4, 5))
|
|
{
|
|
lst_inddel(&(data.adj[6]));
|
|
lst_inddel(&(data.adj[5]));
|
|
lst_inddel(&(data.adj[4]));
|
|
lst_inddel(&(data.adj[3]));
|
|
lst_inddel(&(data.adj[2]));
|
|
lst_inddel(&(data.adj[1]));
|
|
lst_inddel(&(data.adj[0]));
|
|
ft_memdel((void**)&(data.adj));
|
|
return (1);
|
|
}
|
|
if (!add_link(&data, 5, 6) || !add_link(&data, 5, 7))
|
|
{
|
|
lst_inddel(&(data.adj[6]));
|
|
lst_inddel(&(data.adj[5]));
|
|
lst_inddel(&(data.adj[4]));
|
|
lst_inddel(&(data.adj[3]));
|
|
lst_inddel(&(data.adj[2]));
|
|
lst_inddel(&(data.adj[1]));
|
|
lst_inddel(&(data.adj[0]));
|
|
ft_memdel((void**)&(data.adj));
|
|
return (1);
|
|
}
|
|
if (!add_link(&data, 6, 7))
|
|
{
|
|
lst_inddel(&(data.adj[7]));
|
|
lst_inddel(&(data.adj[6]));
|
|
lst_inddel(&(data.adj[5]));
|
|
lst_inddel(&(data.adj[4]));
|
|
lst_inddel(&(data.adj[3]));
|
|
lst_inddel(&(data.adj[2]));
|
|
lst_inddel(&(data.adj[1]));
|
|
lst_inddel(&(data.adj[0]));
|
|
ft_memdel((void**)&(data.adj));
|
|
return (1);
|
|
}
|
|
ft_printf("===== list of adj =====\n");
|
|
i = 0;
|
|
while (i < NB_NODES)
|
|
{
|
|
ft_printf("===== adj of %d =====\n", i);
|
|
it = data.adj[i];
|
|
while (it)
|
|
{
|
|
ft_printf("index: %d\nweight: %d\n\n", it->index, it->weight);
|
|
it = it->next;
|
|
}
|
|
i++;
|
|
}
|
|
path = edmunds_karp(&data, 0, 7);
|
|
if (path != NULL)
|
|
{
|
|
i = 0;
|
|
while (path[i])
|
|
{
|
|
it = path[i];
|
|
while (it)
|
|
{
|
|
ft_printf(" %d -> ", it->index);
|
|
it = it->next;
|
|
}
|
|
ft_putchar('\n');
|
|
i++;
|
|
}
|
|
}
|
|
tablst_inddel(path);
|
|
lst_inddel(&(data.adj[7]));
|
|
lst_inddel(&(data.adj[6]));
|
|
lst_inddel(&(data.adj[5]));
|
|
lst_inddel(&(data.adj[4]));
|
|
lst_inddel(&(data.adj[3]));
|
|
lst_inddel(&(data.adj[2]));
|
|
lst_inddel(&(data.adj[1]));
|
|
lst_inddel(&(data.adj[0]));
|
|
ft_memdel((void**)&(data.adj));
|
|
return (0);
|
|
}
|