【发布时间】:2014-11-20 07:06:54
【问题描述】:
我正在努力创建一种有效的算法,该算法可以确定一组学生是否可以分为两组。
请注意,有一些提供的约束类型为(X,Y) 学生X 必须与学生Y 一起使用,而某些类型的约束为(A,B) 学生A 不能与学生@987654326 一起使用@。不是每个学生都对他有约束,有些学生有多重约束。
我考虑了一个图,其中每个学生都是一个节点,然后如果学生可以在同一组中,则两个节点通过一条边连接(例如,他们要么具有必须在一起和/或不在一起的约束'没有他们不能在一起的限制)。但是,一旦我构建了这个图形表示,我不确定我可以应用什么算法来解决(或证明,鉴于一组约束这是不可能的)。
有什么建议吗?谢谢!
【问题讨论】:
-
我认为你的计划是好的第一步。您可能有几个集群,通过“同组”约束边连接的学生。之后,“不在同一组”约束可用于将集群分成两组。我不知道如何对待没有任何约束的学生。
-
您希望仅使用 2 种颜色为您的图表着色,这是使用 Ali 建议的二分图完成的。
标签: algorithm graph breadth-first-search depth