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; }
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; }