public Maze(MazeCell[,] mazeCells, MazeCell startCell, MazeCell exitCell) { MazeCells = mazeCells ?? throw new ArgumentNullException(nameof(mazeCells)); StartCellPosition = startCell; ExitCellPosition = exitCell; }
/// <summary> /// Возвращает путь между двумя точками в лабиринте /// </summary> /// <param name="source">Начальная точка пути в лабиринте</param> /// <param name="destination">Конечная точка пути в лабиринте</param> /// <param name="token"></param> /// <returns>Список координат точек между начальной и конечной точкой лабиринта</returns> public List <MazeCell> GetCellsPath(MazeCell source, MazeCell destination) { return(Chain.Traverse(CreateChainTree(source, destination, CancellationToken.None))); }
public Chain(MazeCell current, Chain prev = null) { CurrentCell = current; PreviousChain = prev; }
/// <summary> /// Асинхронно возвращает путь между двумя точками в лабиринте и поддерживает отмену операции /// </summary> /// <param name="source">Начальная точка пути в лабиринте</param> /// <param name="destination">Конечная точка пути в лабиринте</param> /// <param name="token">Объект <see cref="CancellationToken"/> для отмены операции.</param> /// <returns>Список координат точек между начальной и конечной точкой лабиринта</returns> private List <MazeCell> GetCellsPathAsync(MazeCell source, MazeCell destination, CancellationToken token) { return(Chain.Traverse(CreateChainTree(source, destination, token))); }
/// <summary> /// Асинхронно возвращает путь между двумя точками в лабиринте /// </summary> /// <param name="source">Начальная точка пути в лабиринте</param> /// <param name="destination">Конечная точка пути в лабиринте</param> /// <param name="token">Объект <see cref="CancellationToken"/> для отмены операции.</param> /// <returns>Список координат точек между начальной и конечной точкой лабиринта</returns> public Task <List <MazeCell> > GetCellsPathTaskAsync(MazeCell source, MazeCell destination, CancellationToken token) { return(Task.Run(() => GetCellsPathAsync(source, destination, token), token)); }