rendered paste bodyvoid FindLargestWolfHordeCPU(){ // equ classes //int* linked = (int*) malloc(NX * NY * sizeof(int) + 2 * sizeof(int)); int* linked = new int[NX * NY + 2]; // binarize matrix int labelMatrix[NX][NY]; for (int x = 0; x < NX; x++) for (int y = 0; y < NY; y++) labelMatrix[x][y] = ELETTER[x][y] == ELEM_FARKAS ? 1 : 0; // first pass int nextLabel = 2; for(int y = 1; y < NY; y++) { for(int x = 1; x < NX; x++) { if (labelMatrix[x][y] != 0) { int left = labelMatrix[x-1][y]; int upper = labelMatrix[x][y - 1]; if (left == 0 && upper == 0) { linked[nextLabel] = nextLabel; labelMatrix[x][y] = nextLabel; nextLabel++; } else { if (left == 0 && upper > 1) { labelMatrix[x][y] = upper; } else { if (left > 1 && upper == 0) { labelMatrix[x][y] = left; } else { int minL; int maxL; if (left < upper) { minL = left; maxL = upper; } else { minL = upper; maxL = left; } labelMatrix[x][y] = minL; linked[maxL] = linked[minL]; } } } } } } // second pass for(int y = 1; y < NY; y++) { for(int x = 1; x < NX; x++) { if (labelMatrix[x][y] != 0) { labelMatrix[x][y] = linked[labelMatrix[x][y]]; } } } // determine largest horde //int* counts = (int*) malloc((nextLabel - 1) * sizeof(int)); int* counts = new int[nextLabel - 1]; for (int i = 0; i < nextLabel; i++) counts[i] = 0; for (int i = 2; i < nextLabel; i++) counts[linked[i]]++; nHordeMembers = counts[2]; int maxLabel = 2; for (int i = 3; i < nextLabel; i++) if (counts[i] > nHordeMembers) { nHordeMembers = counts[i]; maxLabel = i; } nHordeMembers = 0; // mark horde members for (int x = 0; x < NX; x++) for (int y = 0; y < NY; y++) if (labelMatrix[x][y] == maxLabel) { nHordeMembers++; ELETTER[x][y] = ELEM_HORDA_TAG; }}