typedef struct NODO { int grado; int color; int *adya; } NODO; #include #include #include #include /* Macros */ #define MIN(x,y) ((x)<(y)?(x):(y)) #define MAX(x,y) ((x)>(y)?(x):(y)) #define ABS(x) ((x)<0?-(x):(x)) #define NORM2(x,y) sqrt((x)*(x)+(y)*(y)) #define getrandom( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min)) // #define NTOP 3 // #define NITERS 15 /* Variables Globales */ NODO **uno; int n,m,num_color,cost; int **c; /* Matriz de vertices en cada color */ int *v; /* Numero de vertices por color. v[0]=dim del vector*/ int *e; /* Numero de aristas ilegales en cada color */ int cota_sup; int giter,citer,csize,noimpiter; /* Prototipos */ int construir(); int rlf(); int xrlf(int TrialNum,int CandNum); void grafo_aleat(int p,char *nombre); void reserva_nodos(); int* reserva_vector(int dim); void color_inicial_aleat(); int comprueba_color(int num_colores); int random_no_color_admis(int admis); int grado_maximo_no_coloreado(int iter); int no_adyacentes(int a,int b); void abortar(char *texto); void imprime_color(); void imprime_grafo(); int random_grasp_vert(int iter); int random_vert_ilegal(); int estrella(); int primer_color_legal(int i,int start); int mejora(int ncolor,int tipo); int xgreedy(int max_iter,int rep); int sa_ilegal(); int sa_2(int tope); void lee_grafo_d(char *name); void estadistica(double *media,double *stdv,double p); int new_coste(int vert,int old_c,int new_c,int*,int*); int inicia_v_e_coste(); int random_vert(); int actualiza_solucion(int vert,int old_c,int new_c,int,int); int sa(int,int*); int grasp(int ngiters,int tipo); int simple_tabu(); int mejora_estrella(int f); int tabucol(int max_iter,int rep); void mete_tabu(int *tabu_v,int *tabu_c,int v,int c); int es_tabu(int *tabu_v,int *tabu_c,int v,int c); int c_ileg(int v,int new_color); int ilegal(int *ilegales); void actualiza_clases(int *ilegales,int v,int new_color); void lee_grafo_l(char *name);