用于将所有项目与同一列表中的另一项目匹配的算法,其中一些项目具有限制

99m*_*les 3 ruby algorithm math

给定数组[a,b,c,d,e,f]

我希望将每个字母与除自身之外的任何其他字母相匹配,从而产生如下内容:

  • a - c
  • b - f
  • d - e

问题在于,每个字母可能被限制为与一个或多个其他字母匹配.

所以,比如说,

  • a不能与c,d匹配
  • c不能与e,f匹配
  • e无法与a匹配

关于如何解决这个问题的任何指导?我正在使用Ruby,但任何伪代码都会有所帮助.

谢谢!

Mar*_*ers 5

您描述的问题是称为最大匹配(或更具体地说是完美匹配)的图形问题.限制对应于图中顶点之间没有直线的顶点.

您可以使用Edmond的匹配算法.