/* $Id$ */
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
*/
hungarian_problem_t *hungarian_new(int rows, int cols, int width, int match_type) {
int i;
- int max_cost = 0;
hungarian_problem_t *p = xmalloc(sizeof(*p));
memset(p, 0, sizeof(p));
/**
* Do the assignment.
*/
-int hungarian_solve(hungarian_problem_t* p, int *assignment) {
+int hungarian_solve(hungarian_problem_t* p, int *assignment, int *final_cost, int cost_threshold) {
int i, j, m, n, k, l, s, t, q, unmatched, cost;
int *col_mate;
int *row_mate;
/* collect the assigned values */
for (i = 0; i < m; ++i) {
- assignment[i] = col_mate[i];
+ if (cost_threshold > 0 && p->cost[i][col_mate[i]] >= cost_threshold)
+ assignment[i] = -1; /* remove matching having cost > threshold */
+ else
+ assignment[i] = col_mate[i];
}
/* In case of normal matching: remove impossible ones */
xfree(unchosen_row);
xfree(col_mate);
- return cost;
+ *final_cost = cost;
+
+ return 0;
}