int ITraveller.Travel(int index, int[][] cells)
        {
            TravellerPrinter.PrintCells(index, cells);
            int price = GetMinTravelPrice(cells);

            TravellerPrinter.PrintPaidPrice(price);
            return(price);
        }
        private static int GetMinTravelPrice(int[][] cells)
        {
            // добавляем двух юнитов, один двигается вниз, другой направо
            List <Unit> units = new List <Unit>()
            {
                new Unit(new Position(0, 0), DIRECTION.DOWN, cells), new Unit(new Position(0, 0), DIRECTION.RIGHT, cells)
            };

            // Двигаемся пока все юниты не достигли конца

            bool end = false;

            while (!end)
            {
                end = true;
                foreach (Unit unit in units)
                {
                    UnitMethods.Move(unit);
                    end = end == true && (unit.Stuck || unit.Finished);
                }
                int unitsAdded = UnitMethods.AddNewUnits(ref units);
                end = end == true && unitsAdded == 0;
                // удаление застрявших юнитов
                var newUnits = new List <Unit>();
                foreach (Unit unit in units)
                {
                    if (!unit.Stuck)
                    {
                        newUnits.Add(unit);
                    }
                    //else Console.WriteLine("removed unit");
                }
                units = newUnits;
            }

            // Находим лучшего юнита
            Unit bestUnit = units.Count == 0?new Unit(new Position(0, 0), DIRECTION.DOWN, cells): units[0];

            for (int i = 1; i < units.Count; i++)
            {
                if (bestUnit.PaidHistoryIndex.Count > units[i].PaidHistoryIndex.Count)
                {
                    bestUnit = units[i];
                }
            }
            var bestUnitHistory = PositionMethods.ConvertListToTuples(bestUnit.History);

            TravellerPrinter.PrintUserRoute(bestUnitHistory);
            TravellerPrinter.PrintPaidRoute(bestUnit.PaidHistoryIndex, bestUnitHistory);
            return(bestUnit.PaidHistoryIndex.Count);
        }