27 bool Munkres::find_uncovered_in_matrix(
double item,
int &row,
int &col)
29 for (row=0; row < matrix.
num_rows; row++)
31 for (col=0; col < matrix.
num_cols; col++)
33 if (matrix(row,col) == item)
39 bool Munkres::pair_in_list(
const std::pair<int,int> &needle,
const std::list<std::pair<int,int> > &haystack)
41 for (std::list<std::pair<int,int> >::const_iterator i=haystack.begin(); i != haystack.end(); i++)
50 int Munkres::step1(
void)
52 for (
int row=0; row < matrix.
num_rows; row++)
53 for (
int col=0; col < matrix.
num_cols; col++)
54 if (matrix(row,col) == 0)
57 for (
int nrow=0; nrow < matrix.
num_rows; nrow++)
58 if (mask_matrix(nrow,col) == STAR)
66 for (
int ncol=0; ncol < matrix.
num_cols; ncol++)
67 if ( mask_matrix(row,ncol) == STAR )
76 mask_matrix(row,col)=STAR;
83 int Munkres::step2(
void)
88 for (
int row=0; row < rows; row++)
89 for (
int col=0; col < cols; col++)
90 if (mask_matrix(row,col) == STAR)
96 int k=rows < cols ? rows : cols;
106 int Munkres::step3(
void)
115 if (find_uncovered_in_matrix(0, saverow, savecol))
117 mask_matrix(saverow,savecol)=PRIME;
124 for (
int ncol = 0; ncol < matrix.
num_cols; ncol++)
125 if (mask_matrix(saverow,ncol) == STAR)
127 row_mask[saverow]=
true;
128 col_mask[ncol]=
false;
135 int Munkres::step4(
void)
140 std::list<std::pair<int,int> > seq;
142 std::pair<int,int> z0(saverow, savecol);
143 std::pair<int,int> z1(-1,-1);
144 std::pair<int,int> z2n(-1,-1);
145 seq.insert(seq.end(), z0);
146 int row, col=savecol;
163 for (row=0; row < rows; row++)
164 if (mask_matrix(row,col) == STAR)
168 if (pair_in_list(z1, seq))
172 seq.insert(seq.end(), z1);
181 for (col = 0; col < cols; col++)
182 if (mask_matrix(row,col) == PRIME)
186 if (pair_in_list(z2n, seq))
189 seq.insert(seq.end(), z2n);
195 for (std::list<std::pair<int,int> >::iterator i=seq.begin();
200 if (mask_matrix(i->first,i->second) == STAR)
201 mask_matrix(i->first,i->second)=NORMAL;
205 if (mask_matrix(i->first,i->second) == PRIME)
206 mask_matrix(i->first,i->second)=STAR;
210 for (
int rowi=0; rowi < mask_matrix.
num_rows; rowi++)
212 for (
int coli=0; coli < mask_matrix.
num_cols; coli++)
214 if (mask_matrix(rowi,coli) == PRIME)
215 mask_matrix(rowi,coli) = NORMAL;
219 for (
int i=0; i < rows; i++)
222 for (
int i=0; i < cols; i++)
229 int Munkres::step5(
void)
242 for (
int row=0; row < rows; row++)
245 for (
int col=0; col < cols; col++)
247 if ((h > matrix(row,col) && matrix(row,col) != 0) || h == 0)
251 for (
int row=0; row < rows; row++)
253 for (
int col=0; col < cols; col++)
256 for (
int col=0; col < cols; col++)
258 for (
int row=0; row < rows; row++)
274 for (
int row=0; row < m.
num_rows; row++)
276 for (
int col=0; col < m.
num_cols; col++)
278 if (m(row,col) != INFINITY && m(row,col) > highValue)
279 highValue = m(row,col);
284 for (
int row=0; row < m.
num_rows; row++)
285 for (
int col=0; col < m.
num_cols; col++)
286 if (m(row,col) == INFINITY)
287 m(row,col)=highValue;
296 row_mask=SG_MALLOC(
bool, matrix.
num_rows);
297 col_mask=SG_MALLOC(
bool, matrix.
num_cols);
298 for (
int i=0; i < matrix.
num_rows; i++)
301 for (
int i=0; i < matrix.
num_cols; i++)
330 for (
int row=0; row < matrix.
num_rows; row++)
331 for (
int col=0; col < matrix.
num_cols; col++)
332 if (mask_matrix(row,col) == STAR)
all of classes and functions are contained in the shogun namespace