我们得到一个没有循环的无向图。我们必须检查是否有可能删除边,使每个顶点的度数为1。
我应该尝试这个问题?我应该使用邻接矩阵还是列表。
请建议我有效的方式。
答案 0 :(得分:0)
如果图形需要完全连接,则可能当且仅当 正好有两个顶点,它们之间有一条边。
如果不需要完全连接,则必须搜索a 类似的星座。也就是说,您需要查看是否可以 将图分割成顶点对,每个顶点有一条边 对。这就是我们追求的目标。我们知道什么?
图表没有循环。这意味着它必须是一棵树! (不必要 但是,二进制)。也许我们可以从开始时急切地解决这个问题 树的底部?我们不知道底部是什么;我们怎么样 解决了吗?我们可以自己决定,所以我决定挑选所有 留下“底部”。
我现在提出以下算法(你可能会有效率) 评估自己,它不一定是最好的算法):
那么你使用什么数据结构呢?我认为这是最简单的 使用优先级队列,可能基于最小堆,度数为 优先。您可以使用链接列表作为叶子的临时存储 你已经访问但尚未删除。别忘了减少 步骤1.2.2中Q的优先级。
但你可以做得更好!添加所有叶子(度数为1的顶点) 链表。在步骤1中循环显示该列表。在步骤1.2.2中,检查 去除L和P后的Q度。如果度数为1,则将其添加到 叶子清单!
我相信你也可以递归地实现整个算法,但我让你 想一想。