我正在尝试编写遍历无向、无权图的代码。实际上,该方法将传递一个节点(该节点知道其所有邻居)。然后,该方法必须通过从节点到节点并收集连接彼此的节点的信息来有效地建立图形模型。最终,该方法将拥有完整的节点列表和连接它们的所有顶点的列表。
问题的关键在于“有效”这个词以及我的意思是什么。让我引起您对这个小图的注意:
让我们假设我从节点G开始。我可以访问C、B、F、D、H、J或E。我想要最小化访问节点的次数,并且为了访问一个节点,我必须通过通往该节点的所有节点。
例如:假设我决定访问节点C。下一个要访问的节点可以是A、B、F、D、H、J或E。但是,要访问除A以外的任何节点,我都必须再次经过G,这被认为是低效的。而要访问A,我必须再次访问G和C,然后穿过C再回到图的其他部分。所以我决定访问A。这意味着我必须再次穿过C才能到达G。因此,从逻辑上讲,最好最后访问C分支。
然而,当程序从节点G开始时,不知道分支C通向死路。当我写这篇文章时,我认为这是不可能的,但我还是问了一下:有没有办法仅使用给定的信息(即程序只知道它访问过的节点和从这些节点发出的边缘)尽可能有效地遍历这个图?或者我应该采用Dijkstra算法的变化来确保我访问每个节点?
如果需要,所有内容将用Java编写。
问题的关键在于“有效”这个词以及我的意思是什么。让我引起您对这个小图的注意:
让我们假设我从节点G开始。我可以访问C、B、F、D、H、J或E。我想要最小化访问节点的次数,并且为了访问一个节点,我必须通过通往该节点的所有节点。
例如:假设我决定访问节点C。下一个要访问的节点可以是A、B、F、D、H、J或E。但是,要访问除A以外的任何节点,我都必须再次经过G,这被认为是低效的。而要访问A,我必须再次访问G和C,然后穿过C再回到图的其他部分。所以我决定访问A。这意味着我必须再次穿过C才能到达G。因此,从逻辑上讲,最好最后访问C分支。
然而,当程序从节点G开始时,不知道分支C通向死路。当我写这篇文章时,我认为这是不可能的,但我还是问了一下:有没有办法仅使用给定的信息(即程序只知道它访问过的节点和从这些节点发出的边缘)尽可能有效地遍历这个图?或者我应该采用Dijkstra算法的变化来确保我访问每个节点?
如果需要,所有内容将用Java编写。