int main(int argc, char **argv) { srand(time(NULL)); clock_t beg, end; int size = 50; grid *grd = grid_allocate(size, size); beg = clock(); grid_create(grd, 0.6); cl_list* clusters = clusterization(grd); end = clock(); int i, j; for (i = 0; i < size; i++) { for (j = 0; j < size; j++) printf("%d", grd->cells[i * size + j]); printf("\n"); } cl_list_print(clusters); create_image("img.png", 2000, grd, clusters); grid_free(grd); printf("Finished in %g sec\n", (double)(end - beg) / CLOCKS_PER_SEC); return 0; }
// Create the simple decomposition grid. struct grid_domain_t* grid_init_simple( int nx, int ny, int ns, int sx, int sy, int ss, int bx, int ex, int by, int ey, int bs, int es) { struct grid_domain_t* domains = grid_allocate( nx, ny, ns, sx, sy, ss, bx, ex, by, ey, bs, es); int nsubdomains = sx * sy * ss; grid_decompose_balanced(domains, nx, ny, ns, sx, sy, ss, bx, ex, by, ey, bs, es); // Set domains overlaps. grid_set_overlaps(domains, 0, sx, sy, ss, bx, ex, by, ey, bs, es); // Create an fictive empty domain // to be referenced in heighbourhood links. struct grid_domain_t* empty = NULL; size_t szempty = sizeof(struct grid_domain_t) * (PTRN_N + 1); empty = (struct grid_domain_t*)malloc(szempty); memset(empty, 0, szempty); empty->subdomains = (struct grid_domain_t*)(empty + 1); // Link domains using fictive empty domain. grid_set_links(domains, empty, 0, sx, sy, ss, bx, ex, by, ey, bs, es); // Set domains edges subgrid. grid_set_edges(domains, sx, sy, ss, bx, ex, by, ey, bs, es); // Set domains links without fictive empty domain. grid_set_links(domains, 0, 0, sx, sy, ss, bx, ex, by, ey, bs, es); free(empty); // Multiply normalized overlaps by real. grid_overlaps_multiply(domains, nx, ny, ns, sx, sy, ss, bx, ex, by, ey, bs, es); // Calculate domains sizes. grid_set_sizes(domains, nsubdomains + 1); // Perform consistency checks. grid_check_valid(domains, nsubdomains); return domains; }