从图表中创建“配对”?

时间:2010-05-25 13:59:53

标签: algorithm computer-science graph-theory

这个问题有点像图论中应该有答案,但它并不完全符合我所知道的任何图论问题。 (注意:这实际上是一个现实世界的问题,为了更容易阅读而虚构化)

想象一下,我家里有一群偶数的国际象棋选手。我有足够的桌子和国际象棋套装供所有人玩,但我需要创建一个“配对”(不确定是否有图形理论术语)或一个匹配列表,以便每个人都扮演某人。国际象棋选手都喜欢扮演以前从未玩过的人。

如果我有一个他们所扮演的每个玩家的列表,我可以很容易地构建一个显示前一场比赛的图表。例如,假设A播放了B和C,C播放了D:

A----B
|
|     
C----D

我知道我可以匹配B / C和A / D来创建配对。

但如果之前比赛的图表如下所示:

A----B
  \  |
   \ |
C    D

然后我将无法创建配对。 B只能玩C,这会让A和D(已经玩过的人)相互比赛。

那么,我怎么知道(通过蛮力以外的某种方法)是否可以创建配对?它不是我正在寻找的树或循环,但是我可以测试一些其他图形属性吗?

2 个答案:

答案 0 :(得分:4)

看起来像经典匹配问题:en.wikipedia.org/wiki/Matching_(graph_theory)。您可能正在寻找的是一个完美的匹配。

另请参阅:http://en.wikipedia.org/wiki/Edmonds%27s_matching_algorithm

注意:为了使用匹配算法,您需要使用问题中描述的图表的Complement

答案 1 :(得分:1)

如果你要两次代表你图表中的每个玩家,一旦染成红色并且一旦变成绿色(比如说,但避免黑白以避免与棋子混淆),这可能会成为二分图上的一个问题很多资源。