Ejemplo n.º 1
0
        public override SearchNode[] GetNeighbours()
        {
            var neighbours = graph.GetReachableNodes(portal);

            return(GenerateSearchNodes().ToArray());

            IEnumerable <SearchNode> GenerateSearchNodes()
            {
                foreach (var neighbour in neighbours)
                {
                    var nbLayer = layer;
                    if (graph.GetLabel(portal) == graph.GetLabel(neighbour.node))
                    {
                        nbLayer = nbLayer + (graph.IsInnerPortal(portal) ? 1 : -1);
                    }

                    if (nbLayer >= 0)
                    {
                        yield return(new RecursiveDonutSearchNode(graph, neighbour.node, nbLayer, target, cost + neighbour.weight, this));
                    }
                }
            }
        }