Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 图论:它会停止吗?_Algorithm_Graph Theory_Graph Algorithm - Fatal编程技术网

Algorithm 图论:它会停止吗?

Algorithm 图论:它会停止吗?,algorithm,graph-theory,graph-algorithm,Algorithm,Graph Theory,Graph Algorithm,我不知道如何从这个问题开始: 一个图有n个顶点和m条边。没有两对顶点可以通过多条边连接。Rahul开始玩游戏: 他按照下面的方式改变边缘- 他选择一个顶点,并从该顶点向不存在边的所有其他顶点添加一条边 同时,从该顶点删除所有预先存在的边 只有当两个顶点之间存在一条直边时,此游戏才会停止。你需要确定是否有可能完成这场比赛,或者无论他采取什么行动,这是否永远不会发生 输入:将给出图形的初始状态。 输出:“是”或“否” 有人能给你一个如何开始的提示吗?1)移动的顺序并不重要(因为你可以将任何两个后

我不知道如何从这个问题开始:

一个图有n个顶点和m条边。没有两对顶点可以通过多条边连接。Rahul开始玩游戏: 他按照下面的方式改变边缘-

  • 他选择一个顶点,并从该顶点向不存在边的所有其他顶点添加一条边
  • 同时,从该顶点删除所有预先存在的边
只有当两个顶点之间存在一条直边时,此游戏才会停止。你需要确定是否有可能完成这场比赛,或者无论他采取什么行动,这是否永远不会发生

输入:将给出图形的初始状态。 输出:“是”或“否”

有人能给你一个如何开始的提示吗?

1)移动的顺序并不重要(因为你可以将任何两个后续移动交换到相同的结果)
2) 具有相同顶点的两个后续更改的效果为零
3) 你可以到达最后的状态。你可以在那里改变任何顶点不超过一次
4) 任何两个连接的顶点必须同时更改或同时保持不变,在任何两个未连接的顶点中,只有一个应更改

在图中取一个连接的组件。其中的顶点应全部更改或保持不变。如果组件未完全连接,则无法完成游戏。如果至少有三个相连的组件,完成游戏是不可能的。如果有两个完全连接的组件,则应更改其中一个组件中的所有顶点

回答:当且仅当图形已经完全连接或由两个完全连接的组件组成时,游戏才能结束。(很容易看出,当图形由两个完全连接的组件组成时,更改顶点可以有效地将其从一个组件移动到另一个组件。)

检查答案的算法:假设我们得到一个顶点数n,然后是一个边列表,形式为
(a,b)
,其中
a
b
是[1,n]中的顶点数。设
顶点
为记录数组
(num_边,连接,示例)
,用
(0,k,k)
初始化(
k
为顶点编号)。然后,对于每个边(A,B):

  • 将A和B的
    num_边增加
    1
  • 如果
    A.sample
    等于
    B.sample
    ,则转到下一条边
  • 交换
    A.connected
    B.connected
    ,从
    A.connected
    顶点集
    sample
    A.sample
    ,然后按照
    connected
    一直到B;到了下一个边缘 最后,检查从
    1
    开始的所有顶点以及连接的
    之后的所有顶点是否具有相同的
    num_边
    等于(它们的编号为-1),以及类似循环的所有剩余顶点。时间应该是O(max(n log(n),m)),内存是O(n)。

    1)移动的顺序无关紧要(因为您可以将任何两个后续移动交换到相同的结果)
    2) 具有相同顶点的两个后续更改的效果为零
    3) 你可以到达最后的状态。你可以在那里改变任何顶点不超过一次
    4) 任何两个连接的顶点必须同时更改或同时保持不变,在任何两个未连接的顶点中,只有一个应更改

    在图中取一个连接的组件。其中的顶点应全部更改或保持不变。如果组件未完全连接,则无法完成游戏。如果至少有三个相连的组件,完成游戏是不可能的。如果有两个完全连接的组件,则应更改其中一个组件中的所有顶点

    回答:当且仅当图形已经完全连接或由两个完全连接的组件组成时,游戏才能结束。(很容易看出,当图形由两个完全连接的组件组成时,更改顶点可以有效地将其从一个组件移动到另一个组件。)

    检查答案的算法:假设我们得到一个顶点数n,然后是一个边列表,形式为
    (a,b)
    ,其中
    a
    b
    是[1,n]中的顶点数。设
    顶点
    为记录数组
    (num_边,连接,示例)
    ,用
    (0,k,k)
    初始化(
    k
    为顶点编号)。然后,对于每个边(A,B):

  • 将A和B的
    num_边增加
    1
  • 如果
    A.sample
    等于
    B.sample
    ,则转到下一条边
  • 交换
    A.connected
    B.connected
    ,从
    A.connected
    顶点集
    sample
    A.sample
    ,然后按照
    connected
    一直到B;到了下一个边缘
    最后,检查从
    1
    开始的所有顶点以及连接的
    之后的所有顶点是否具有相同的
    num_边
    等于(它们的编号为-1),以及类似循环的所有剩余顶点。时间应为O(max(n log(n),m)),内存为O(n)。

    具有n顶点的已求解图将是具有½n(n-1)边的完整图

    翻转顶点的状态将意味着顶点与图断开连接,并且有两个断开连接的完整子图K1K(n-1),它们分别包含0½(n-1)(n-2)

    翻转其他顶点的状态将断开每个顶点与包含它的完整子图的连接,并将其连接到其他完整子图的所有顶点。因此,一般来说,如果存在翻转状态的x顶点,则将有两个完整的子图KxK(n-x),其中½x(x-1)x = ( n - SQRT( 4m + 2n - n² ) ) / 2