【问题标题】:Graph problem: choose at most n-k vertices, such that if someone else chooses k vertices with the highest value, none of them will be adjacent图问题:最多选择n-k个顶点,这样如果别人选择k个值最高的顶点,它们都不相邻
【发布时间】:2021-07-14 13:04:12
【问题描述】:

我正在处理以前的编程竞赛问题,但我不知道如何解决这个问题(我已经写出了原始单词问题的上下文)。

给定一个具有 n 个节点的无向​​图,从 1-n 和 m 个边编号,最多选择 n-k 个节点,这样如果其他人选择具有最高数字的 k 个节点(在您没有选择的那些节点中),则没有一个您选择的节点将与他的相邻(共享一条边)。尽可能多地选择。

我能想到的唯一解决方案是检查所有可能性,但这已经超出了时间限制。有没有办法操纵图的邻接矩阵以获得解决方案?或者也许是动态规划?

【问题讨论】:

  • 我不明白问题的“最多选择 n-k 个节点”部分。为什么要选择多个节点?
  • 选择没有边的节点?!
  • 为什么不选择0节点?那么无论其他人选择什么,他的顶点都不会与你的任何顶点相邻。
  • @orlp 我同意这个问题不清楚。做出最初选择的人似乎缺乏目标。 But here's an example where you'd have to choose more than one node.我假设你至少要选择一个节点,并且n=6,k=3。唯一的选项是选择 [6,4,2] 或 [5,3] 或 [5,3,1]。
  • @user3386109 这实际上是一个好点。虽然选择 0 节点的策略总是有效的。

标签: algorithm graph-theory


【解决方案1】:

我假设一个未说明的目标是选择尽可能多的节点。否则,正如 cmets 指出的那样,有几个愚蠢但正确的答案。

这里是选择尽可能多的满足要求的节点的伪代码。

ADD n-k nodes with lowest numbers to a list L
LOOP A over k nodes with highest numbers
    LOOP B over nodes in L
        IF A is adjacent to B
             REMOVE B from L
Output remaining nodes in L

【讨论】:

    猜你喜欢
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2019-08-21
    • 1970-01-01
    相关资源
    最近更新 更多