我有这个特定的问题,但我无法用Prolog语法表达。我很新。
我的有限域名: 来自70个球的所有10球组合
请求的解决方案: 10球组合
约束: 我有一个20个球的列表:set1,set2 .. setN
所选组合不是set1,set2 ... setn的所有10球组合的成员(20球的10球组合)
感谢您的帮助
答案 0 :(得分:0)
这是我对问题的解决方案。
我不知道这是否是最佳选择。
我在具有3000个交叉点的VPS上运行代码。 (部分代码下方只有7个交集)
我不知道PROLOG是否能够解决它?
%use_module(library(clpfd)).
solve_frkeno(B1,B2,B3,B4,B5,B6,B7,B8,B9,B10) :-
between(1, 13, B1),
between(4, 21, B2),
between(8, 29, B3),
between(14, 37, B4),
between(18, 41, B5),
between(27, 50, B6),
between(35, 57, B7),
between(42, 63, B8),
between(50, 68, B9),
between(58, 70, B10),
all_different([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10]),
intersection([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10],[5,6,13,16,19,20,22,30,31,34,35,39,40,51,52,56,59,61,65,69],I1),
length(I1,N1),
between(0,6,N1),
intersection([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10],[5,8,9,13,14,16,21,24,29,33,35,47,49,52,54,58,59,64,65,68],I2),
length(I2,N2),
between(0,6,N2),
intersection([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10],[1,3,6,12,16,21,23,25,28,37,39,40,42,44,48,49,50,58,63,69],I3),
length(I3,N3),
between(0,6,N3),
intersection([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10],[4,8,9,14,21,24,26,28,36,45,46,52,54,57,59,60,61,62,63,67],I4),
length(I4,N4),
between(0,6,N4),
intersection([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10],[9,11,13,16,19,20,25,27,28,29,34,39,41,48,49,50,53,63,64,65],I5),
length(I5,N5),
between(0,6,N5),
intersection([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10],[4,5,9,12,19,29,30,32,33,34,35,38,42,45,49,57,58,60,62,70],I6),
length(I6,N6),
between(0,6,N6),
intersection([B1,B2,B3,B4,B5,B6,B7,B8,B9,B10],[2,3,6,12,13,15,16,19,26,29,30,40,43,51,52,53,58,64,67,69],I7),
length(I7,N7),
between(0,6,N7),