コード例 #1
0
ファイル: TraverserTests.cs プロジェクト: justlev/qxbresolver
        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);
        }
コード例 #2
0
ファイル: TraverserTests.cs プロジェクト: justlev/qxbresolver
        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);
        }
コード例 #3
0
        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;
        }
コード例 #4
0
 public GraphTraversalCouplingProvider(INodeTraverser <decimal> nodesTraverser)
 {
     _nodesTraverser = nodesTraverser;
 }
コード例 #5
0
ファイル: AStar.cs プロジェクト: mrkmg/PathFinder
 /// <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);
コード例 #6
0
 /// <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);
コード例 #7
0
 public DiffGenerator(INodeTraverser nodeTraverser, INodeFinder nodeFinder, INodeComparer nodeComparer)
 {
     NodeTraverser = nodeTraverser;
     NodeFinder    = nodeFinder;
     NodeComparer  = nodeComparer;
 }