📄 city_block.c
字号:
#include <stdio.h>#include "n_dim_traversal.h"/* dist is the "distance" for the search to operate over, and coord is *//* the centre coordinate. If dist is negative, that indicates that *//* all the points inside the 'square' must be examined. This is used *//* to make sure that the surfaces are all checked. */void addtotmplist(out_list,q) LEAFTYPE *out_list; LEAFTYPE q;{ LEAFTYPE tmp; LEAFTYPE tmp2; if (q != NULL) { tmp = (LEAFTYPE)malloc(sizeof(LEAFTYPE)); tmp->val = q->val; tmp->next = (LEAFTYPE) NULL; tmp2 = tmp; while (q->next != NULL) { tmp->next = (LEAFTYPE)malloc(sizeof(LEAFTYPE)); tmp = tmp->next; tmp->val = q->val; tmp->next = (LEAFTYPE) NULL; q = q->next; } tmp->next = *out_list; *out_list = tmp2; }}void city_block(void **, int, int, LEAFTYPE *, int *);void city_block(list, dist, dims, out_list, x) void **list; LEAFTYPE *out_list; int dist, dims; int *x;{ int i, min, max; if (*list == NULL) { return; } if ((x[0] < 0) || (x[0] >= dimsize)) { fprintf(stderr, "Coordinate entry %d is not between 0 and %d\n", x[0], dimsize-1); exit(-1); } if (dims==1) { if (dist == 0) { addtotmplist(out_list, ((LEAFTYPE *) (*list))[x[0]]); } else if (dist < 0) { min=((x[0]+dist)<0)?0:(x[0]+dist); max=((x[0]-dist)>=dimsize)?dimsize-1:(x[0]-dist); for (i=min; i<=max; i++) { addtotmplist(out_list, ((LEAFTYPE *) (*list))[i]); } } else { if ((x[0]-dist)>=0) { addtotmplist(out_list,((LEAFTYPE *) (*list))[x[0]-dist]); } if ((x[0]+dist)<dimsize) { addtotmplist(out_list,((LEAFTYPE *) (*list))[x[0]+dist]); } } } else { if (dist == 0) { city_block(&(((void **) (*list))[x[0]]), dist, dims-1, out_list, &(x[1])); } else if (dist < 0) { min=((x[0]+dist)<0)?0:(x[0]+dist); max=((x[0]-dist)>=dimsize)?dimsize-1:(x[0]-dist); for (i=min; i<=max; i++) { city_block(&(((void **) (*list))[i]), dist, dims-1, out_list, &(x[1])); } } else { min=((x[0]-dist)<0)?0:(x[0]-dist); max=((x[0]+dist)>=dimsize)?dimsize-1:(x[0]+dist); i=min; if ((x[0]-dist) >= 0) { city_block(&(((void **) (*list))[i]), -dist, dims-1, out_list, &(x[1])); i++; } for (; i<max; i++) { city_block(&(((void **) (*list))[i]), dist, dims-1, out_list, &(x[1])); } if ((x[0]+dist) < dimsize) { city_block(&(((void **) (*list))[i]), -dist, dims-1, out_list, &(x[1])); } else { city_block(&(((void **) (*list))[i]), dist, dims-1, out_list, &(x[1])); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -