有向带环图的全路径搜索算法研究与探讨

xingyun86 2010-09-14 06:29:25
当前图的使用比较普遍,图的节点遍历、路径遍历成为热点问题。
某人现在正在研究图的全路径搜索算法,要求如下:
1.该图有n个节点,可能有环,并且可能出现环中有环的情况出现;
2.节点的类型为_GRAPHNODE,
typedef struct _GRAPHNODE
{
int nIndex;//Graph index
int innum;//In path num
int* inNodePath;//In Node list
int outnum;//Out path num
int* outNumPath;//Out Node list
}GRAPHNODE,*PGRAPHNODE;
3.每个节点的出度不大于2,入度可为任意。
4.给定起始节点为FirstNode,目标节点为LastNode.(二者不一定为首个和末个节点),找出两个节点间的所有路径,
并且每个环只允许走一次。
图的示例如下所示:

...全文
712 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingyun86 2010-09-16
  • 打赏
  • 举报
回复
谢谢大家的参与和评论了,这个问题我已经解决了,呵呵,是用我自己的思路。一楼的哥们也下了不少力,不会白让你想的。欢迎大家有空再来。
xingyun86 2010-09-15
  • 打赏
  • 举报
回复
首先非常感谢你,哥们,但是有一点,思想是有的,现在需要代码的实现并且要通过测试,其中的图可能会更复杂,比如同心环、梅花环、蜜蜂环等复杂的图。
哥们能给出测试成功的代码,那就万分感谢了!
熊熊大叔 2010-09-15
  • 打赏
  • 举报
回复
使用回溯就可以了, 伪码如下

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();
}
}
air_snake 2010-09-15
  • 打赏
  • 举报
回复
这种直接要代码的估计要付费吧,这里都是算法思想,点到为止吧。
xingyun86 2010-09-15
  • 打赏
  • 举报
回复
不好意思哈,哥们,我也在用我自己的思路一直在测试,因此,希望能受高人多加指点。我把我的全部家当都贡献出来也行,如果你的思想根本不可行,我就不会做测试的。希望各位尽量把思想贡献一下,在下再次谢过。
同时也欢迎各位来访,共同参与。
国际首创!!!!
超级大笨狼 2010-09-15
  • 打赏
  • 举报
回复
鄙视懒人。
熊熊大叔 2010-09-15
  • 打赏
  • 举报
回复
你也太懒了吧。这段代码调试通过,工作量至少值1000个大洋。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧