Exemple #1
0
        private static IEnumerable <string> ValidateRequest(PathfindingRequestDto pathfindingRequestDto)
        {
            var validator        = new PathfindingRequestDtoValidator();
            var validationResult = validator.Validate(pathfindingRequestDto);

            return(validationResult.Errors.Select(error => error.ErrorMessage));
        }
        public Grid MapPathfindingRequestDto(PathfindingRequestDto pathfindingRequestDto)
        {
            GridNode start  = null;
            GridNode finish = null;

            GridNode[][] grid = pathfindingRequestDto.Grid.Select((row, rowIndex) =>
                                                                  row.Select((nodeDto, colIndex) =>
            {
                var node = new GridNode
                {
                    Type             = (GridNodeType)nodeDto.Type,
                    Visited          = false,
                    Weight           = nodeDto.Weight,
                    TotalWeight      = 0,
                    Heuristic        = 0,
                    Position         = new Position(rowIndex, colIndex),
                    PreviousGridNode = null
                };

                if (node.Type == GridNodeType.Start)
                {
                    start = node;
                }

                if (node.Type == GridNodeType.Finish)
                {
                    finish = node;
                }

                return(node);
            }).ToArray()
                                                                  ).ToArray();

            return(pathfindingRequestDto.SearchDiagonal
                ? new HorizontalDiagonalGrid(grid)
            {
                Start = start, Finish = finish
            }
                : new HorizontalGrid(grid)
            {
                Start = start, Finish = finish
            });
        }
Exemple #3
0
        private IActionResult GenerateResponse(PathfindingAlgorithm algorithm, PathfindingRequestDto pathfindingRequestDto)
        {
            var errors = ValidateRequest(pathfindingRequestDto);

            if (errors.Any())
            {
                return(BadRequest(new ValidationErrorResponseDto
                {
                    ErrorMessages = errors
                }));
            }

            var grid = _requestMapper.MapPathfindingRequestDto(pathfindingRequestDto);

            var pathfindingResult = algorithm switch
            {
                PathfindingAlgorithm.BreadthFirstSearch => _pathfindingService.BreadthFirstSearch(grid),
                PathfindingAlgorithm.Dijkstra => _pathfindingService.Dijkstra(grid),
                PathfindingAlgorithm.AStar => _pathfindingService.AStar(grid),
                _ => throw new InvalidEnumArgumentException()
            };

            return(Ok(_responseMapper.MapPathfindingResult(pathfindingResult)));
        }
Exemple #4
0
 public IActionResult AStar(PathfindingRequestDto pathfindingRequestDto)
 {
     return(GenerateResponse(PathfindingAlgorithm.AStar, pathfindingRequestDto));
 }
Exemple #5
0
 public IActionResult Dijkstra(PathfindingRequestDto pathfindingRequestDto)
 {
     return(GenerateResponse(PathfindingAlgorithm.Dijkstra, pathfindingRequestDto));
 }
Exemple #6
0
 public IActionResult BreadthFirstSearch(PathfindingRequestDto pathfindingRequestDto)
 {
     return(GenerateResponse(PathfindingAlgorithm.BreadthFirstSearch, pathfindingRequestDto));
 }