diff --git a/Makefile b/Makefile index ae3113e..7dc4344 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: tmaze +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2019/03/27 16:51:02 by tmaze #+# #+# # -# Updated: 2019/04/05 13:54:08 by tmaze ### ########.fr # +# Updated: 2019/04/05 15:14:01 by tmaze ### ########.fr # # # #******************************************************************************# @@ -43,7 +43,7 @@ SRC = lm_parser.c \ bfs.c \ lst_ind.c \ edmunds_karp.c \ -# lem_in.c \ +# lem_in.c OBJ = $(SRC:.c=.o) diff --git a/srcs/bfs.c b/srcs/bfs.c index 4bd55ea..44201e7 100644 --- a/srcs/bfs.c +++ b/srcs/bfs.c @@ -6,7 +6,7 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/27 14:41:49 by tmaze #+# #+# */ -/* Updated: 2019/04/05 13:24:22 by tmaze ### ########.fr */ +/* Updated: 2019/04/05 17:43:11 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/srcs/edmunds_karp.c b/srcs/edmunds_karp.c index de41131..1b2dc97 100644 --- a/srcs/edmunds_karp.c +++ b/srcs/edmunds_karp.c @@ -6,7 +6,7 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/28 16:21:19 by tmaze #+# #+# */ -/* Updated: 2019/04/03 17:18:35 by tmaze ### ########.fr */ +/* Updated: 2019/04/05 15:13:53 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ @@ -78,8 +78,6 @@ t_ind **resolve_path(t_lmdata *data, int s_ind, int e_ind return (clean_ret(ret)); j = reset_weights(data, s_ind, j); } - if (j != -1 && lst_indadd(&(ret[i]), j) == NULL) - return (clean_ret(ret)); i++; } } @@ -92,12 +90,16 @@ t_ind **edmunds_karp(t_lmdata *data, int start_ind, int end_ind) int nb_path; nb_path = 0; - bfs(data, tab, start_ind, end_ind); - while (tab[end_ind].parent != -1) + if (data && data->adj) { - nb_path++; - update_weights(data, tab, end_ind); bfs(data, tab, start_ind, end_ind); + while (tab[end_ind].parent != -1) + { + nb_path++; + update_weights(data, tab, end_ind); + bfs(data, tab, start_ind, end_ind); + } + return (resolve_path(data, start_ind, end_ind, nb_path)); } - return (resolve_path(data, start_ind, end_ind, nb_path)); + return (NULL); } diff --git a/srcs/lem_in.c b/srcs/lem_in.c index d17bf98..e23b5fd 100644 --- a/srcs/lem_in.c +++ b/srcs/lem_in.c @@ -6,7 +6,7 @@ /* By: mndhlovu +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/25 06:31:05 by mndhlovu #+# #+# */ -/* Updated: 2019/04/05 13:43:21 by tmaze ### ########.fr */ +/* Updated: 2019/04/05 14:40:50 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ @@ -30,7 +30,7 @@ int main(int ac, char **av) t_lmdata ldata; t_holder holder; int fd; - t_list *it; + t_node *it; t_node *start; t_node *end; @@ -44,17 +44,23 @@ int main(int ac, char **av) { //validation works ft_printf("Success\n"); - it = ldata.nodes; - while (it && ((t_node*)(it->content))->role != 's') + ft_printf("=== ldata ===\nnbants: %d\nnb_nodes: %d\nnodes: %p\nnodes_data: %p\nadj: %d\n\n", ldata.nbants, ldata.nb_nodes, ldata.nodes, ldata.nodes_data, ldata.adj); + it = ldata.nodes_data; + while (it && it->role != 's') { - ft_printf("=== node ===\nindex: %d\nrole: %c\n\n", ((t_node*)(it->content))->ind, ((t_node*)(it->content))->role); + ft_printf("=== node ===\nindex: %d\nrole: %c\n\n", it->ind, it->role); it = it->next; } - start = it->content; - it = ldata.nodes; - while (it && ((t_node*)(it->content))->role != 'e') + ft_printf("=== node ===\nindex: %d\nrole: %c\n\n", it->ind, it->role); + start = it; + it = ldata.nodes_data; + while (it && it->role != 'e') + { + ft_printf("=== node ===\nindex: %d\nrole: %c\n\n", it->ind, it->role); it = it->next; - end = it->content; + } + ft_printf("=== node ===\nindex: %d\nrole: %c\n\n", it->ind, it->role); + end = it; edmunds_karp(&ldata, start->ind, end->ind); } else diff --git a/srcs/test.c b/srcs/test.c index fda4d0c..abc8375 100644 --- a/srcs/test.c +++ b/srcs/test.c @@ -6,20 +6,61 @@ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/03/28 11:37:06 by tmaze #+# #+# */ -/* Updated: 2019/04/05 13:59:02 by tmaze ### ########.fr */ +/* Updated: 2019/04/05 17:43:06 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "lem_in.h" -#define NB_NODES 4 +#define NB_NODES 8 +#define NB_ANTS 20 -int add_link(t_lmdata *data, int n1, int n2) +int add_link(t_lmdata *data, int n1, int n2) { return (lst_indadd(&(data->adj[n1]), n2) && lst_indadd(&(data->adj[n2]), n1)); } -int main(void) +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; @@ -29,8 +70,73 @@ int main(void) 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, 2) || !add_link(&data, 0, 1) || !add_link(&data, 0, 3)) + 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])); @@ -38,69 +144,6 @@ int main(void) 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[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[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[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) @@ -114,7 +157,7 @@ int main(void) } i++; } - path = edmunds_karp(&data, 0, 1); + path = edmunds_karp(&data, 0, 7); if (path != NULL) { i = 0; @@ -131,10 +174,10 @@ int main(void) } } 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[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]));