private List <Point> GetMinPathToChest(State state, HashSet <Point> chests,
                                               ref int spentEnergy, ref Point startPoint)
        {
            var      array          = new MazeCell[state.MapWidth, state.MapHeight];
            var      queue          = new Queue <MazeCell>();
            MazeCell minPathToChest = null;

            if (chests.Contains(startPoint))
            {
                chests.Remove(startPoint);
                return(new List <Point>());
            }
            minPathToChest = AddNewCellsToQueue(
                state, chests, array, queue, minPathToChest,
                new MazeCell(0, startPoint, null));
            while (queue.Count > 0)
            {
                var currentPath = queue.Dequeue();
                minPathToChest = AddNewCellsToQueue(
                    state, chests, array, queue, minPathToChest, currentPath);
            }
            if (minPathToChest == null)
            {
                return(null);
            }
            chests.Remove(minPathToChest.Coords);
            spentEnergy += minPathToChest.PathCost;
            startPoint   = minPathToChest.Coords;
            return(minPathToChest.GetPath());
        }