我有一个由节点 a、b、c、d、e、fg 组成的有向循环图,其中任何一个节点都连接到每个其他节点。边缘可以是单向的或双向的。我需要打印出这样的有效订单,例如。f->a->c->b->e->d->g 这样我就可以从开始节点到达结束节点。请注意,所有节点都必须出现在输出列表中。另请注意,图中可能存在循环。
我想出什么:基本上首先我们可以尝试找到一个起始节点。如果存在一个没有传入边的节点(最多可能有一个这样的节点)。我可能会找到一个起始节点,也可能不会。另外我会做一些预处理来找到节点的总数(我们称之为n)。现在我将从开始节点开始一个 DFS,当我到达它们时将节点标记为已访问并计算我访问了多少个节点。如果我可以通过这种方法到达 n 个节点。我做完。如果我点击一个节点,从该节点到任何未访问的节点都没有出边,我已经走到了死胡同,我将再次将该节点标记为未访问,减少指针并转到其前一个节点以尝试不同的路线.
当我找到一个起始节点时就是这种情况。如果我没有找到起始节点,我将不得不尝试使用各种节点。
我不知道我是否接近解决方案。任何人都可以在这方面帮助我吗?