我有一个具有 N 个节点和 2N-3 条边的连接的无向图。您可以将图视为构建在现有初始图的基础上,该图具有 3 个节点和 3 条边。添加到图中的每个节点都与图中的现有节点有 2 个连接。当所有节点都添加到图中(总共添加 N-3 个节点)时,构建最终图。
最初我被问到,这个图中可以访问一次的最大节点数是多少(初始节点除外),即给定图的最大哈密顿路径中包含的最大节点数是多少?(好吧,说最大哈密顿路径不是一个有效的短语,但考虑到问题的性质,我需要找到一次访问的最大节点数,并且行程在初始节点处结束。我认为它可以被视为子图是哈密顿量,由最大数量的节点组成,因此是最大可能的哈密顿路径)。
由于没有要求我找到路径,因此我应该首先检查给定数量的节点是否存在哈密顿路径。我知道平面图和循环图s (C n ) 是哈密顿图(我也知道哈密顿图的 Ore 定理,但我将要处理的图不会是一个很有可能的密集图,因此使 Ore 的定理很漂亮在我的情况下没用)。因此,我需要找到一种算法来检查该图是否为循环图,即是否存在一个包含给定图的所有节点的循环。
由于 DFS 用于检测周期,我认为对 DFS 进行一些小的操作可以帮助我检测我正在寻找的内容,例如跟踪探索的节点,最后检查最后访问的节点是否与初始节点有连接。不幸的是,我无法通过这种方法取得成功。
我尝试的另一种方法是排除一个节点,然后尝试从另一个相邻节点开始到达其相邻节点。根据所选的相邻节点,该算法可能无法给出正确的结果。
我几乎被困在这里。你能帮我想出另一种算法来告诉我该图是否是循环图吗?
编辑
我在评论的帮助下意识到(谢谢你):
循环图由一个循环组成,有 N 个边和 N 个顶点。如果存在一个包含给定图的所有节点的循环,那就是哈密顿循环。-纳米
我实际上是在寻找一条哈密顿路径,我并不打算这样做:) 再想一想,我认为在构建图的同时检查图的哈密顿属性会更有效,这也是我正在寻找的: 时间效率。
经过一番思考,我认为无论节点数量是多少,由于节点添加标准,该图似乎是哈密顿量。问题是我无法确定,也无法证明。以这种方式添加节点,即添加具有 2 条边的新节点,将添加的节点连接到现有节点,是否会改变图的哈密顿属性?如果它不改变哈密顿性质,那又如何呢?如果它确实改变了,又是怎么回事?谢谢。
编辑#2
我再次意识到,按照我描述的方式构建图形可能会改变哈密顿量。考虑如下给出的输入:
1 3
2 3
1 5
1 3
这些输入表示第 4 个节点连接到节点 1 和节点 3,第 5 个节点连接到节点 2 和节点 3。. .
第 4 和第 7 个节点连接到相同的节点,从而将可以仅访问一次的最大节点数降低 1。如果我检测到这些冲突(不包括诸如 3 3 之类的输入,这是您建议的示例由于问题表明新添加的边连接到其他 2 个节点)并降低最大节点数,从 N 开始,我相信我可以得到正确的结果。
看,我不选择连接,它们是给我的,我必须找到最大值。节点数。
我认为在构建图形时计算相同的连接数并从 N 中减去相同的连接数会得到正确的结果吗?你能证实这一点还是这个算法有缺陷?