> In event of multiple paths, a non-optimal solution may be returned. Problem description clearly states there may be multiple solutions. But in the test: List<Point> points1 = new ArrayList<Point>(); points1.add(new Point(0, 0)); //....more points........ points1.add(new Point(2, 3)); Assert.assertEquals(points1, lip.increasingPath(0, 0, 2, 3)); You compare the found solution (which is suboptimal) to itself after the fact. Instead you should verify that the solution is correct using the definition given in the question. e.g. - first element is the solution is the given start point, - last element is the given end point, - each point in the path is the neighbor to another. - and the values in the matrix corresponding to those points are non-decreasing.