All pastes #2051034 Raw Edit

Unnamed

public cpp v1 · immutable
#2051034 ·published 2011-04-26 23:40 UTC
rendered paste body
void 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;			}}