33,028
社区成员
发帖
与我相关
我的任务
分享
int FindAllPath(PGRAPHNODE FirstNode, PGRAPHNODE LastNode, PATH_VECOTR &Pathes)
{
/*起点等于终点的情况*/
if (FirstNode->nIndex == LastNode->nIndex)
{
PATH Path = new PATH;
AddNodeIntoPath(FirstNode->nIndex);
Pathes.push_back(Path);
return 1;
}
/*其他情况*/
PushNodeIntoStack(FirstNode);
PushPathIntoStack(0);
PGRAPHNODE curNode = PeekNodeFromStack();
int curPath = PeekPathFromStack();
while (NULL != curNode)
{
if (curPath < curNode->outNum)
{
PGRAPHNODE nextNode = GetNodeFromIndex(curNode->outNumPath[curPath]);
if (nextNode->nIndex = LastNode->nIndex)
{
//输出一组解
Pathes.push_back();
//找下一条路径
IncreasePathStackTopValue();
}
else
{
if (FindNodeInStackCircle(nextNode))
{
//找下一组解
IncreasePathStackTopValue();
}
else
{
PushNodeIntoStack(nextNode);
PushPathIntoStack(0);
}
}
}
else
{
//找完了当前节点所有的出路径, 进行回溯
PopNodeFromStack();
PopPathFromStack();
}
curNode = PeekNodeFromStack();
curPath = PeekPathFromStack();
}
}