Exemplo n.º 1
0
 private void AddPrivate(NodeTree nodeTree, MultiLabelMarkQueue nodeNew)
 {
     if (nodeNew.T <= nodeTree.nodeMultiLabel.T)
     {
         if (nodeTree.left == null)
         {
             nodeTree.left = new NodeTree(nodeNew);
             return;
         }
         else
         {
             AddPrivate(nodeTree.left, nodeNew);
         }
     }
     else
     {
         if (nodeTree.right == null)
         {
             nodeTree.right = new NodeTree(nodeNew);
             return;
         }
         else
         {
             AddPrivate(nodeTree.right, nodeNew);
         }
     }
 }
Exemplo n.º 2
0
        public NodeGraphDTO CalculateShortestPath(NodeGraphDTO startNode, NodeGraphDTO endNode)
        {
            startNode.MultiLabelMark.Add(new MultiLabelMark(0, 0, null, 0));

            MultiLabelMarkQueue currentMark   = null;
            BinaryTree          unsettledTree = new BinaryTree();

            foreach (Edge edge in startNode.Node.EdgeStartNodeNavigation)
            {
                unsettledTree.Add(new MultiLabelMarkQueue(edge.EndNodeNavigation.NodeGraphDTO, edge.DistanceInMeters, startNode, 0));
            }

            while (!unsettledTree.IsEmpty() && endNode.MultiLabelMark.Count < K)
            {
                currentMark = GetLowestDistanceNode(unsettledTree);

                int k = currentMark.W.MultiLabelMark.Count;
                if (k < K)
                {
                    k++;
                    currentMark.W.MultiLabelMark.Add(new MultiLabelMark(k, currentMark.T, currentMark.X, currentMark.Xk));

                    foreach (Edge edge in currentMark.W.Node.EdgeStartNodeNavigation)
                    {
                        if (!PathContainsNode(edge.EndNodeNavigation.NodeGraphDTO, currentMark.W, k))
                        {
                            unsettledTree.Add(new MultiLabelMarkQueue(edge.EndNodeNavigation.NodeGraphDTO, currentMark.T + edge.DistanceInMeters, currentMark.W, k));
                        }
                    }
                }
            }
            return(endNode);
        }
Exemplo n.º 3
0
 public void Add(MultiLabelMarkQueue node)
 {
     if (root == null)
     {
         root = new NodeTree(node);
     }
     else
     {
         AddPrivate(root, node);
     }
 }
Exemplo n.º 4
0
 public NodeTree(MultiLabelMarkQueue nodeMultiLabel)
 {
     this.nodeMultiLabel = nodeMultiLabel;
 }