【发布时间】:2012-10-03 22:11:23
【问题描述】:
我在 swi-prolog 中编写代码来解决数字 1-6 的 Second End View Pazzles 7*7(例如 http://www.funwithpuzzles.com/2009/10/abcd-second-end-view-ev4.html 像这样的 5*5)
:- [library(clpfd)].
gen_row(Ls):-length(Ls, 7), Ls ins 0..6.
abc_view :-
maplist(gen_row, [R1,R2,R3,R4,R5,R6,R7]),
transpose([R1,R2,R3,R4,R5,R6,R7], [C1,C2,C3,C4,C5,C6,C7]),
maplist(all_distinct, [R1,R2,R3,R4,R5,R6,R7]),
maplist(all_distinct, [C1,C2,C3,C4,C5,C6,C7]),
start(R1, 4),
start(R2, 2),
start(R3, 3),
start(R4, 5),
start(R5, 3),
finish(R1, 6),
finish(R2, 4),
finish(R3, 2),
finish(R5, 1),
finish(R7, 2),
start(C2, 3),
start(C3, 4),
start(C4, 3),
start(C5, 5),
start(C6, 4),
start(C7, 1),
finish(C1, 3),
finish(C2, 2),
finish(C3, 5),
finish(C4, 5),
finish(C5, 6),
finish(C6, 1),
finish(C7, 4),
maplist(writeln, [R1,R2,R3,R4,R5,R6,R7]).
我需要如何编写逻辑来解决它,也许是 4*4 或 5*5.. 我很乐意提供任何帮助。 我需要为 3 次测试编写它,但即使是一次也很重要。
【问题讨论】:
-
我认为你不能在所有行/列上使用 all_distinct,因为 0(空单元格,不是吗?)可以出现更多次...
-
我不明白在什么情况下我必须使用 distinct 以及什么对我的任务更好,只能有一个空单元格,是的,这里是 0,每一行和每一列。这是我在大学的第一个也是最后一个实验室,所以我对 prolog 知之甚少。
-
你是对的。我误解了这个谜题,描述,作为其他人已经指出的(已删除)评论。
-
我找到了另一个看起来像这样的任务的答案,但我不明白它是完整的代码,因为它在我的 swi-prolog 中不起作用,它总是写错..? - abc_view。错误的。 p.s.对不起我的傻瓜(stackoverflow.com/questions/10686773/end-view-puzzle-prolog
-
我没有看到已删除的评论。这是关于什么的
标签: prolog logic constraints swi-prolog clpfd