void Split :: merge(double _p) { QuadTree * c; rec_zone(root); for(int i(0); i < rows * lines; i++) result[i] = 0; for(int j(0); j < lines - 1; j++) for(int i(0); i < rows - 1; i++) { c = zone[j * rows + i]; if(c != zone[j * rows + i + 1]) { if(find(c->neighbours.begin(), c->neighbours.end(), zone[j * rows + i + 1]) == c->neighbours.end()) { c->neighbours.push_back(zone[j * rows + i + 1]); } } if(c != zone[(j + 1) * rows + i]) { if(find(c->neighbours.begin(), c->neighbours.end(), zone[(j + 1) * rows + i]) == c->neighbours.end()) { c->neighbours.push_back(zone[(j + 1) * rows + i]); } } } for(int j(lines - 1); j > 0; j--) for(int i(rows - 1); i > 0; i--) { c = zone[j * rows + i]; if(c != zone[j * rows + i - 1]) { if(find(c->neighbours.begin(), c->neighbours.end(), zone[j * rows + i - 1]) == c->neighbours.end()) { c->neighbours.push_back(zone[j * rows + i - 1]); } } if(c != zone[(j - 1) * rows + i]) { if(find(c->neighbours.begin(), c->neighbours.end(), zone[(j - 1) * rows + i]) == c->neighbours.end()) { c->neighbours.push_back(zone[(j - 1) * rows + i]); } } } rec_merge(root, _p); merged = true; }