コード例 #1
0
        private EdgeDistance Nearest(List <EdgeDistance> edgeDistances)
        {
            EdgeDistance nearest = null;

            foreach (var edgeDistance in edgeDistances)
            {
                if (nearest == null || edgeDistance.Distance < nearest.Distance)
                {
                    nearest = edgeDistance;
                }
            }
            return(nearest);
        }
コード例 #2
0
        private EdgeDistance Furthest(List <EdgeDistance> edgeDistances)
        {
            EdgeDistance furthest = null;

            foreach (var edgeDistance in edgeDistances)
            {
                if (furthest == null || edgeDistance.Distance > furthest.Distance)
                {
                    furthest = edgeDistance;
                }
            }

            return(furthest);
        }
コード例 #3
0
        protected virtual EdgeDistance GetEdgeToSplit(Node node, List <EdgeDistance> edges)
        {
            EdgeDistance toSplit = null;
            var          shortestAddedDistance = double.MaxValue;

            foreach (var edge in edges)
            {
                var a             = Calculator.Distance(node, edge.NodeA);
                var b             = Calculator.Distance(node, edge.NodeB);
                var addedDistance = (a + b) - edge.Distance;
                if (addedDistance < shortestAddedDistance)
                {
                    toSplit = edge;
                    shortestAddedDistance = addedDistance;
                }
            }
            return(toSplit);
        }
コード例 #4
0
        protected virtual EdgeDistance GetFirstEdge(WorkingSet workingSet)
        {
            var nodes = workingSet.NodesNotInGraph.ToArray();
            var count = nodes.Length;

            EdgeDistance furthestNodes = null;

            for (int i = 0; i < count; i++)
            {
                var from = nodes[i];
                for (int j = i + 1; j < count; j++)
                {
                    var to       = nodes[j];
                    var distance = Calculator.Distance(from, to);
                    if (furthestNodes == null || distance > furthestNodes.Distance)
                    {
                        furthestNodes = new EdgeDistance(from, to, distance);
                    }
                }
            }

            return(furthestNodes);
        }
コード例 #5
0
 public void SplitEdge(Node node, EdgeDistance edgeToSplit)
 {
     CurrentWalk.Remove(edgeToSplit);
     AddToWalk(new EdgeDistance(node, edgeToSplit.NodeA));
     AddToWalk(new EdgeDistance(node, edgeToSplit.NodeB));
 }
コード例 #6
0
 public void AddToWalk(EdgeDistance edge)
 {
     CurrentWalk.Add(edge);
     MoveNodeToWalk(edge.NodeA);
     MoveNodeToWalk(edge.NodeB);
 }