【发布时间】:2017-05-16 21:11:36
【问题描述】:
假设我有 2 个列表:一个包含字符串,一个包含整数,它们的长度不同。我正在构建的应用程序将使用这些列表来生成车辆和覆盖区域的组合。字符串表示区域名称,整数表示车辆 ID。
我的目标是生成用于进一步调查的所有可能的独特组合的列表。一辆车可以服务多个区域,但一个区域不能由多辆车服务。每个区域都必须接受服务,每辆车都必须使用。
所以总结一下约束:
- 每个区域只使用一次
- 每辆车至少使用一次
- 不能遗漏任何区域。
- 不能遗漏任何车辆
这是一个例子:
public class record = {
public string areaId string{get;set;}
public int vehicleId int {get;set;}
}
List<string> areas = new List<string>{ "A","B","C","D"};
List<int> vehicles = new List<int>{ 1,2};
List<List<record>> uniqueCombinationLists = retrieveUniqueCombinations(areas,vehicles);
我只是不知道如何制作retrieveUniqueCombinations 函数。也许我只是看起来错了或想得太难了。我一直在思考大规模循环和其他蛮力方法。一个更好的方法的解释将不胜感激。
结果应该类似于这样,我认为这包含了此示例的所有可能性。
A1;B1;C1;D2
A1;B1;C2;D1
A1;B2;C1;D1
A2;B1;C1;D1
A2;B2;C2;D1
A2;B2;C1;D2
A2;B1;C2;D2
A1;B2;C2;D2
A2;B1;C1;D2
A1;B2;C2;D1
A2;B2;C1;D1
A1;B1;C2;D2
A2;B1;C2;D1
A1;B2;C1;D2
【问题讨论】:
-
你能提供一个示例输出吗
-
不,反之亦然。一辆车可以服务多个区域,一个区域不能由多辆车服务。
-
检查我的编辑。我想我最好把你的问题表述清楚,但如果我搞砸了任何细节,请edit你的问题。
-
你的例子有点混乱。为什么没有
A1 B1 C1 D1? -
这看起来很像stackoverflow.com/q/10519619/215552,除了约束。确实,您的图块有点误导,因为它都是可能的独特组合;这是最可能的独特组合...