public void When_RequestingDistance_BetweenNotConnectedElements_MinusOneIsReturned() { var expectedLength = 3; var node = new Node <int>(1); var node2 = new Node <int>(2); _sut = new RecursiveNodeTraverser <int>(node); var result = _sut.GetLengthBetweenNodes(node, node2); Assert.AreEqual(-1, result); }
public void When_RequestingDistance_BetweenElements_WithOneGap_InGraph_TheCorrectLength_IsReturned() { var expectedLength = 2; var node = new Node <int>(1); var childNode1 = new Node <int>(2); var childNode2 = new Node <int>(3); childNode1.AddConnection(childNode2); node.AddConnection(childNode1); _sut = new RecursiveNodeTraverser <int>(node); var result = _sut.GetLengthBetweenNodes(node, childNode2); Assert.AreEqual(2, result); }
protected SolverBase(T origin, T destination, INodeTraverser <T> traverser = null) { Origin = origin ?? throw new ArgumentNullException(nameof(origin)); Destination = destination ?? throw new ArgumentNullException(nameof(destination)); Traverser = traverser ?? GetDefaultTraverser(origin) ?? throw new ArgumentException("Either Traverser needs to be passed, or T must be an ITraversableNode", nameof(traverser)); // create the origin node metadata manually as the "GetMeta" method // needs to use the CurrentMetaData CurrentMetaData = new GraphNodeMetaData <T>(origin, 0) { ToCost = Traverser.EstimatedCost(origin, Destination), PathLength = 0, }; OpenNodes = new C5.IntervalHeap <GraphNodeMetaData <T> >(this) { CurrentMetaData }; _closest = CurrentMetaData; // set to 1 because the origin is node 0 _nextGraphNodeId = 1; }
public GraphTraversalCouplingProvider(INodeTraverser <decimal> nodesTraverser) { _nodesTraverser = nodesTraverser; }
/// <summary> /// Finds a path between the origin and destination node using the AStar method. /// </summary> /// <param name="origin"><see cref="SolverBase{T}.Origin"/></param> /// <param name="destination"><see cref="SolverBase{T}.Destination"/></param> /// <param name="greedFactor"><see cref="AStar{T}.GreedFactor"/></param> /// <param name="path">The resulting path if <see cref="SolverState.Success"/>, otherwise <c>null</c></param> /// <param name="traverser"> /// <para>The <see cref="INodeTraverser{T}"/> implementation to use when traversing the graph</para> /// <para>-or-</para> /// <para><c>null</c> to use the <see cref="ITraversableNode{T}"/> implementation on each node.</para> /// </param> /// <returns>The <see cref="SolverState"/> of the solver after running.</returns> /// <typeparam name="T">The type of nodes to traverse. Must extend <see cref="ITraversableNode{T}"/> if traverser is null.</typeparam> public static SolverState Solve <T>(T origin, T destination, double greedFactor, out IList <T> path, INodeTraverser <T> traverser = null) where T : IEquatable <T> => AStar <T> .Solve(origin, destination, greedFactor, out path, traverser);
/// <summary> /// Finds a path between the origin and destination node using the Breadth First method. /// </summary> /// <param name="origin"><see cref="SolverBase{T}.Origin"/></param> /// <param name="destination"><see cref="SolverBase{T}.Destination"/></param> /// <param name="path">The resulting path if <see cref="SolverState.Success"/>, otherwise <c>null</c></param> /// <param name="traverser"> /// <para>The <see cref="INodeTraverser{T}"/> implementation to use when traversing the graph</para> /// <para>-or-</para> /// <para><c>null</c> to use the <see cref="ITraversableNode{T}"/> implementation on each node.</para> /// </param> /// <param name="maxTicks">The maximum number of ticks to run before failing.</param> /// <returns>The <see cref="SolverState"/> of the solver after running.</returns> /// <typeparam name="T">The type of nodes to traverse. Must extend <see cref="ITraversableNode{T}"/> if traverser is null.</typeparam> public static SolverState Solve <T>(T origin, T destination, out IList <T> path, INodeTraverser <T> traverser = null, int maxTicks = 1000000) where T : IEquatable <T> => BreadthFirst <T> .Solve(origin, destination, out path, traverser, maxTicks);
public DiffGenerator(INodeTraverser nodeTraverser, INodeFinder nodeFinder, INodeComparer nodeComparer) { NodeTraverser = nodeTraverser; NodeFinder = nodeFinder; NodeComparer = nodeComparer; }