Exemple #1
0
void HungarianMatrix<T>::changeMatrix() { // step 6
	int min = matrix[0][0].value;
	findMinInMatrix(min);
	for (size_t i = 0; i < height; ++i)
		for (size_t j = 0; j < width; ++j) {
			if (check_rows[i] == 1)
				matrix[i][j].value += min;
			if (check_column[j] == 0)
				matrix[i][j].value -= min;
		}
	replaceZeros();
}
int main()
{
    int i, *arr, n;
    printf("\nEnter n\n");
    scanf("%d", &n);
    arr = malloc(sizeof(int)*n);
    printf("\nEnter elements\n");
    for (i = 0; i < n; ++i)
        scanf("%d", &arr[i]);
    replaceZeros(arr, n);
    getMaxSubArray(arr, n);
    return 0;
}
Exemple #3
0
vector<pair<T,T>> HungarianMatrix<T>::startHungarianAlg() {
	vector<pair<T,T>> ans(width);
	smdir(); // substract min element of every element in rows and star zero
	if (!czc()) // check for zero in every column
		replaceZeros();
	else {
		for (size_t i = 0; i < width; ++i)
			for (size_t j = 0; j < height; ++j)
				if (matrix[i][j].state == Node::FIRSTSTATE) {
					ans[i].first = i;
					ans[i].second = j;
				}
		return ans;
	}
	return ans;

}