1
我正在使用序言来尝试解决kakuro难题。我有这样的,其中R和C分别代表行和各框的起点规则的列表,L代表长度,S是该行中的数字的总和,在prolog中解决难题 - 使用约束条件生成解决方案?
% across(R, C, L, S)
across(2,4,2,4).
across(2,10,2,4).
across(3,4,4,12).
across(3,10,2,6).
across(4,3,2,6).
据我可以告诉,为了解决使用约束的难题,对于每个元素L,我将不得不找到1到9之间的不同数字,这些数字在加起来时等于S.我真的很努力去解决这个问题,我有代码到目前为止是这样的:
solveAcross(Solution) :-
findall([R,C,L,S], across(R,C,L,S), List),
Solution = length(List, L),
Solution ins 1..9,
all_distinct(Solution),
labeling([], Solution).
但是,所有这一切都是返回false。
任何帮助,将不胜感激。
'Solution = length(List,L)'和'Solution = 1..9'是什么意思? – lurker
考虑两个目标'Solution = length(List,L)'和'Solution = 1..9'的结合,**都出现在你的程序中。很显然,这个连接本身已经**失败**,因为'1..9'和'length(List,L)'不统一。 – mat
@lurker,对不起,应该是解决方案1..9,这意味着生成的解决方案必须介于1和9之间。 解决方案=长度(列表,L)我认为会创建一个长度为L的空列表,但打字这一点,这似乎并不是我想要实现我的目标所要做的。 – AgarAgar