我有一个定向循环图,由节点a,b,c,d,e,f g组成,其中节点连接到每个其他节点。边缘可以是单向的或双向的。我需要打印出这样的有效命令,例如。 f-> a-> c-> b-> e-> d-> g,这样我就可以从起始节点到达末端节点。请注意,所有节点必须出现在输出列表中。 另请注意,图中可能有周期。我该如何做这个图遍历?
我想出了: 基本上首先我们可以尝试找到一个开始节点。如果有一个节点使得它没有传入边缘(最多可能有一个这样的节点)。我可能会找到一个开始节点或者可能不会。另外我会做一些预处理来找到节点的总数(让我们称它为n)。现在,我将从启动节点标记节点开始创建一个DFS,并在访问它们时计算我访问的节点数量。如果我可以通过这种方法到达n个节点。我做完。如果我击中了一个节点,而这个节点没有到任何未访问节点的传出边缘,那么我已经遇到了一个死路,我只会将该节点再次标记为未访问,减少指针并转到其前一节点以尝试不同的路由。
这是我找到起始节点的情况。如果我没有找到一个起始节点,我只需要在各个节点上尝试。
我不知道我是否接近解决方案。任何人都可以在这方面帮助我吗?
你的解决方案与DFS似乎是合法的,最新的问题是什么?什么是问题?我不明白什么意思是“找到开始节点”?如果你有图表,你应该有关于所有节点的信息。 – libik