It finnaly kinda works
algorithm with no double nodes and nearly efficient enough still some optimizations to find for --big-superposition maps
This commit is contained in:
146
includes/lem_in.h
Normal file
146
includes/lem_in.h
Normal file
@@ -0,0 +1,146 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* lem_in.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: tmaze <tmaze@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2019/03/23 17:31:19 by tmaze #+# #+# */
|
||||
/* Updated: 2019/04/18 19:20:47 by tmaze ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#ifndef LEM_IN_H
|
||||
# define LEM_IN_H
|
||||
# include "libft.h"
|
||||
# include "limits.h"
|
||||
|
||||
typedef struct s_node
|
||||
{
|
||||
char *name;
|
||||
int x;
|
||||
int y;
|
||||
char role;
|
||||
int ind;
|
||||
struct s_node *next;
|
||||
} t_node;
|
||||
|
||||
typedef struct s_ind
|
||||
{
|
||||
int index;
|
||||
int weight;
|
||||
struct s_ind *next;
|
||||
} t_ind;
|
||||
|
||||
typedef struct s_lmdata
|
||||
{
|
||||
int nbants;
|
||||
int nb_nodes;
|
||||
int nb_paths_max;
|
||||
t_node *nodes_data;
|
||||
t_ind **adj;
|
||||
} t_lmdata;
|
||||
|
||||
typedef struct s_bfs
|
||||
{
|
||||
int parent;
|
||||
char visited;
|
||||
char old_visited;
|
||||
int queue;
|
||||
} t_bfs;
|
||||
|
||||
typedef struct s_ants
|
||||
{
|
||||
int nb_ant;
|
||||
int nb_path;
|
||||
int nb_node;
|
||||
char end;
|
||||
struct s_ants *next;
|
||||
} t_ants;
|
||||
|
||||
typedef struct s_syntax
|
||||
{
|
||||
int nb_state;
|
||||
int s_cmd;
|
||||
int s_pos;
|
||||
int error;
|
||||
int s_error;
|
||||
int e_error;
|
||||
int v_error;
|
||||
int l_error;
|
||||
int gr_status;
|
||||
int s_vert;
|
||||
int e_vert;
|
||||
int e_cmd;
|
||||
int e_pos;
|
||||
int v_flag;
|
||||
} t_syntax;
|
||||
|
||||
typedef struct s_temp
|
||||
{
|
||||
int src_ind;
|
||||
int dest_ind;
|
||||
struct s_temp *next;
|
||||
} t_temp;
|
||||
|
||||
typedef struct s_holder
|
||||
{
|
||||
int count;
|
||||
t_temp *data;
|
||||
} t_holder;
|
||||
|
||||
typedef struct s_rdata
|
||||
{
|
||||
char *line;
|
||||
struct s_rdata *next;
|
||||
} t_rdata;
|
||||
|
||||
int lm_error_exit(void);
|
||||
int lm_validate(t_syntax *synt, t_lmdata *lmdata);
|
||||
int lm_parser(t_syntax *synt, t_lmdata *ldata
|
||||
, t_holder *holder);
|
||||
int lm_check_room_before(char **tab, t_syntax *synt);
|
||||
void lm_clear_unv(t_holder *holder);
|
||||
int lm_add_vertex(t_lmdata *ldata, char *raw, char flag
|
||||
, t_syntax *synt);
|
||||
int lm_ext_conn(t_holder *holder, t_lmdata *data
|
||||
, char *raw);
|
||||
int lm_find_index(t_lmdata *data, char *str);
|
||||
|
||||
int lm_get_value(char *line);
|
||||
void lm_get_cmd_vert(int count, t_syntax *synt
|
||||
, t_lmdata *ldata, char *line);
|
||||
void lm_get_vert_link(int count, t_syntax *synt
|
||||
, t_lmdata *ldata, t_holder *holder
|
||||
, char *line);
|
||||
int lm_validate_rooms(char *name, char *x, char *y);
|
||||
int lm_adj_parser(t_lmdata *lmdata, t_holder *holder);
|
||||
void lm_init_data(t_syntax *synt, t_holder *holder
|
||||
, t_lmdata *ldata);
|
||||
int lm_verify_cmd(t_syntax *synt, t_holder *holder
|
||||
, t_lmdata *data);
|
||||
void lm_initdata(t_lmdata *data);
|
||||
int lm_getparams(t_lmdata *data);
|
||||
void lm_clean_data(t_lmdata *data);
|
||||
|
||||
t_ind **lst_indinit(t_lmdata *data);
|
||||
int lst_indadd_link(t_lmdata *data, int n1, int n2);
|
||||
t_ind *lst_indadd(t_ind **lst, int ind);
|
||||
void lst_inddel(t_ind **lst);
|
||||
void tablst_inddel(t_ind **tab);
|
||||
|
||||
t_ants *add_ant(t_ants **ants, int nb_ant, int nb_path
|
||||
, t_ind **paths);
|
||||
void del_ants(t_ants **ants);
|
||||
t_node *get_node(t_lmdata *data, int index);
|
||||
t_ind *get_node_path(t_ind *lst, int index);
|
||||
|
||||
void bfs(t_lmdata *data, t_bfs *tab, int start_ind
|
||||
, int end_ind);
|
||||
t_ind **edmonds_karp(t_lmdata *data, int s_ind, int e_ind);
|
||||
int get_score(t_lmdata *data, t_ind **ret, int nb_paths);
|
||||
void print_paths(t_lmdata *data, t_ind **ret);
|
||||
int push_ants(t_lmdata *data, t_ind **paths
|
||||
, int nb_paths);
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user