Pawel Netzel - software
Repositories
Help
Report an Issue
plGeoAdaptels
Code
Commits
Branches
Tags
Search
Tree:
e8ae190
Branches
Tags
master
plGeoAdaptels
minlist.c
new distances
netzel
commited
e8ae190
at 2024-03-25 09:42:52
minlist.c
Blame
History
Raw
#include <stdlib.h> #include "minlist.h" #define LISTINCREMENT 1000000 MINLIST* create_minlist(int max_size) { MINLIST* ml = (MINLIST *)malloc(sizeof(MINLIST)); ml->cells = (CELL *)malloc(max_size*sizeof(CELL)); ml->N = 0; ml->max_size = max_size; return ml; } void free_minlist(MINLIST *ml) { free(ml->cells); free(ml); } void insert_minlist(MINLIST *ml, int x, int y, long index, double dist) { if (ml->N +1 >= ml->max_size) { ml->max_size += LISTINCREMENT; ml->cells = (CELL *)realloc(ml->cells, ml->max_size * sizeof(CELL)); } int i = ml->N + 1; int j = i / 2; while (i > 1 && ml->cells[j].dist > dist) { ml->cells[i] = ml->cells[j]; i = j; j /= 2; } ml->cells[i].index = index; ml->cells[i].x = x; ml->cells[i].y = y; ml->cells[i].dist = dist; ml->N++; } void getmin_minlist(MINLIST* ml, CELL* cell) { if(ml->N==0) return; int i, j, k; *cell = ml->cells[1]; ml->cells[1]=ml->cells[ml->N]; ml->N--; i = 1; while( i != ml->N + 1) { k = ml->N + 1; j = i * 2; if(j <= ml->N && ml->cells[j].dist < ml->cells[k].dist) k = j; if(j+1 <= ml->N && ml->cells[j+1].dist < ml->cells[k].dist) k = j + 1; ml->cells[i] = ml->cells[k]; i = k; } } long get_cell_index(CELL* c, int n, int* di) { return c->index + di[n]; }