Загрузка данных


using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;

namespace Dungeon;

public class BfsTask
{
	public static IEnumerable<SinglyLinkedList<Point>> 
        FindPaths(Map map, Point start, Chest[] chests)
	{
        var queue = new Queue<SinglyLinkedList<Point>>();
        queue.Enqueue(new SinglyLinkedList<Point>(start));
        var vistedPoints = new HashSet<Point>();
        vistedPoints.Add(start);
        var pointChests = chests.Select(Chest => Chest.Location);
        while (queue.Count != 0)
        {
            var item = queue.Dequeue();
            for (var dy = -1; dy <= 1; dy++)
                for (var dx = -1; dx <= 1; dx++)
                {
                    if (dx != 0 && dy != 0) continue;
                    var point = new Point(item.Value.X + dx, item.Value.Y + dy);
                    if (point.X < 0 || point.X >= map.Dungeon.GetLength(0) 
                        || point.Y < 0 || point.Y >= map.GetLength(1)) continue;
                    if (map.Dungeon[point.X, point.Y] != MapCell.Empty) continue;
                    if (vistedPoints.Contains(point)) continue;
                    queque.Enqueque(new SinglyLinkedList<Point>(point, item));
                    if (pointChests.Contains(point))
                        yield return (new SinglyLinkedList<Point>(point, item));
                }
            vistedPoint.Add(item.Value);

        }
    }
}