本文整理汇总了C++中Proxy::isGoal方法的典型用法代码示例。如果您正苦于以下问题:C++ Proxy::isGoal方法的具体用法?C++ Proxy::isGoal怎么用?C++ Proxy::isGoal使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Proxy
的用法示例。
在下文中一共展示了Proxy::isGoal方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: newnode
int
DepthFirstHillClimbSearch(List<NodeType> &startstatelist,
BinaryTree_AVL<DataType> &startlist,
BinaryTree_AVL<DataType> &otherlist)
{
int status;
// track all states created
BinaryTree_AVL<String> allstates;
// create open stack for traversal
List<Proxy<NodeType> > openstack;
// keep track of current path here instead of
// using parent pointers. parent pointers cause
// cycles and reference-counted pointers cannot
// deal with cyclic data structures. they cause
// major memory leaks.
//
int nodedepth = 1;
List<Proxy<NodeType> > currentpath;
// copy list of start states
ListIterator<NodeType> startstateIter(startstatelist);
for ( ; !startstateIter.done(); startstateIter++)
{
// copy start state
Proxy<NodeType> pstart(startstateIter());
// calculate the heuristic value for this node
if ((status = pstart->heuristic(startlist, otherlist)) != OK)
{
ERRORD("heuristic() failed.", status, errno);
return(status);
}
// set start node depth
pstart->setDepth(nodedepth);
// insert start state into open queue
if ((status = openstack.insertOrdered(pstart)) != OK)
{
ERRORD("insertOrdered() failed.", status, errno);
return(status);
}
}
// children priority queue
List<Proxy<NodeType> > childpq;
// start search loop
int olddepth = nodedepth;
Proxy<NodeType> pchild;
for (Proxy<NodeType> pnode; ! openstack.isEmpty(); )
{
// remove next node from priority open queue
if ((status = openstack.removeAtFront(pnode)) != OK)
{
ERRORD("removeAtFront() failed.", status, errno);
return(status);
}
// check if we have a goal node or not
status = pnode->isGoal(startlist, otherlist);
switch (status)
{
case OK:
// update current path
if ((status = updatepath(nodedepth,
olddepth, pnode, currentpath)) != OK)
return(status);
break;
case NOMATCH:
case MAXDEPTHEXCEEDED:
// no clauses were generated. skip further
// processing of this node.
continue;
case VALID:
// update current path
if ((status = updatepath(nodedepth,
olddepth, pnode, currentpath)) != OK)
return(status);
// goal node, print solution
PrintSolution(pnode);
PrintSolution(currentpath);
PrintRenameVariables(pnode);
// check if more than one solutions is required
solutionsfound += 1;
statistics[SolutionsFound] += 1;
totalstatistics[TotalSolutionsFound] += 1;
if (solutionsfound >= solutionsrequired)
return(VALID);
continue;
case MAXCLAUSEEXCEEDED:
// check if any solutions were found
//.........这里部分代码省略.........
示例2: dfs
int
IterativeDeepeningSearch(Proxy<NodeType> &proot, int &threshold,
int &next_threshold, BinaryTree_AVL<DataType> &startlist,
BinaryTree_AVL<DataType> &otherlist)
{
int status;
// check if we have a goal node or not
status = proot->isGoal(startlist, otherlist);
switch (status)
{
case OK:
break;
case NOMATCH:
return(NOTPROVEN);
case VALID:
// goal node, print solution
PrintSolution(proot);
PrintRenameVariables(proot);
return(VALID);
default:
// some type of error
ERRORD("isGoal() failed.", status, errno);
return(status);
}
// calculate the heuristic value for root node
if ((status = proot->heuristic(startlist, otherlist)) != OK)
{
ERRORD("heuristic() failed.", status, errno);
return(status);
}
// set initial threshold values
threshold = proot->getFvalue();
next_threshold = INT_MAX;
// start interative deepening, probe ahead
while ( 1 )
{
status = dfs(proot, threshold, next_threshold,
startlist, otherlist);
switch (status)
{
case OK:
case NOMATCH:
case NOTPROVEN:
case MAXDEPTHEXCEEDED:
// reset thresholds
if (next_threshold == INT_MAX)
{
ERROR("next_threshold is STILL INT_MAX.",
errno);
return(NOTOK);
}
threshold = next_threshold;
next_threshold = INT_MAX;
break;
case MAXCLAUSEEXCEEDED:
return(NOTPROVEN);
case VALID:
return(status);
default:
// some type of error
ERRORD("interative deepening dfs() failed.",
status, errno);
return(status);
}
}
}