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()); }