Skip to content

Commit 0acab86

Browse files
committed
Minimize along direction made depending of appending rows or columns. This has effect for non-square matrices.
1 parent 404757c commit 0acab86

2 files changed

Lines changed: 60 additions & 2 deletions

File tree

src/munkres.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ template<typename Data> class Munkres
8484
// than the maximum value in the matrix.
8585
replace_infinites(matrix);
8686

87-
minimize_along_direction(matrix, false);
88-
minimize_along_direction(matrix, true);
87+
minimize_along_direction(matrix, rows >= columns);
88+
minimize_along_direction(matrix, rows < columns);
8989

9090
// Follow the steps
9191
int step = 1;

tests/munkrestest.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,64 @@ TEST_F (MunkresTest, solve_3x3_NonObviousSolutionCase002_Success)
521521

522522

523523

524+
TEST_F (MunkresTest, solve_6x4_NonObviousSolutionCase003_Success)
525+
{
526+
// Arrange.
527+
Matrix<double> etalon_matrix{
528+
{-1.0, -1.0, -1.0, -1.0},
529+
{ 0.0, -1.0, -1.0, -1.0},
530+
{-1.0, 0.0, -1.0, -1.0},
531+
{-1.0, -1.0, -1.0, -1.0},
532+
{-1.0, -1.0, -1.0, 0.0},
533+
{-1.0, -1.0, 0.0, -1.0}
534+
};
535+
Matrix<double> test_matrix{
536+
{1.79769e+308, 7.33184e+08, 9.41561e+08, 2.79247e+08},
537+
{3.06449e+08, 1.79769e+308, 3.3464e+08, 7.06878e+08},
538+
{9.93296e+08, 1.9414e+08, 1.79769e+308, 1.14174e+08},
539+
{3.51623e+08, 2.48635e+08, 7.81242e+08, 1.79769e+308},
540+
{7.02639e+08, 8.51663e+08, 9.37382e+08, 4.96945e+07},
541+
{7.58851e+08, 8.58445e+08, 8.7235e+07, 5.47076e+08}
542+
};
543+
544+
Munkres<double> munkres;
545+
546+
// Act.
547+
munkres.solve(test_matrix);
548+
549+
// Assert.
550+
EXPECT_EQ (etalon_matrix, test_matrix);
551+
}
552+
553+
554+
555+
TEST_F (MunkresTest, solve_4x6_NonObviousSolutionCase004_Success)
556+
{
557+
// Arrange.
558+
Matrix<double> etalon_matrix{
559+
{-1.0, 0.0, -1.0, -1.0, -1.0, -1.0},
560+
{-1.0, -1.0, 0.0, -1.0, -1.0, -1.0},
561+
{-1.0, -1.0, -1.0, -1.0, -1.0, 0.0},
562+
{-1.0, -1.0, -1.0, -1.0, 0.0, -1.0}
563+
};
564+
Matrix<double> test_matrix{
565+
{1.79769e+308, 3.06449e+08, 9.93296e+08, 3.51623e+08, 7.02639e+08, 7.58851e+08},
566+
{7.33184e+08, 1.79769e+308, 1.9414e+08, 2.48635e+08, 8.51663e+08, 8.58445e+08},
567+
{9.41561e+08, 3.3464e+08, 1.79769e+308, 7.81242e+08, 9.37382e+08, 8.7235e+07},
568+
{2.79247e+08, 7.06878e+08, 1.14174e+08, 1.79769e+308, 4.96945e+07, 5.47076e+08}
569+
};
570+
571+
Munkres<double> munkres;
572+
573+
// Act.
574+
munkres.solve(test_matrix);
575+
576+
// Assert.
577+
EXPECT_EQ (etalon_matrix, test_matrix);
578+
}
579+
580+
581+
524582
TEST_F (MunkresTest, solve_3x3_IsValide_Fail)
525583
{
526584
// Arrange.

0 commit comments

Comments
 (0)