コード例 #1
0
 protected override int CompareTreeNodes(TreeNode_Base secondNode)
 {
     if (TotalCosts < secondNode.TotalCosts)
     {
         return(-1);
     }
     else if (TotalCosts > secondNode.TotalCosts)
     {
         return(1);
     }
     else
     {
         if (EstimatedCosts < secondNode.EstimatedCosts)
         {
             return(-1);
         }
         else if (EstimatedCosts > secondNode.EstimatedCosts)
         {
             return(1);
         }
         else
         {
             return(0);
         }
     }
 }
コード例 #2
0
        public Result RunStep()
        {
            ActualStep++;

            if (openNodeList.Count == 0)
            {
                return(Result.NoSolution);
            }

            openNodeList.Sort();

            TreeNode_Base actualNodeToExpand = openNodeList[0];

            openNodeList.Remove(actualNodeToExpand);
            actualNodeToExpand.ActualState = TreeNode_Base.State.Closed;

            if (actualNodeToExpand == EndNode)
            {
                return(Result.SolutionFound);
            }

            foreach (TreeNode_Base node in actualNodeToExpand.GetAllConnectedNodes())
            {
                node.PreviousNode  = actualNodeToExpand;
                node.ActualState   = TreeNode_Base.State.Open;
                node.PreviousCosts = node.PreviousNode.PreviousCosts + TreeNode_Base.StepCost;

                if (!openNodeList.Contains(node))
                {
                    openNodeList.Add(node);
                }
            }

            return(Result.StepDone);
        }
コード例 #3
0
 protected override int CompareTreeNodes(TreeNode_Base secondNode)
 {
     if (PreviousCosts > secondNode.PreviousCosts)
     {
         return(-1);
     }
     else
     {
         if (PreviousCosts < secondNode.PreviousCosts)
         {
             return(1);
         }
         else
         {
             return(0);
         }
     }
 }
コード例 #4
0
 protected abstract int CompareTreeNodes(TreeNode_Base secondNode);