我正在尝试解决可以描述为的 ntiles 问题,我们有一个网格。然后我们要在网格中定位给定大小的 N 个图块。我们有这样的规则:
ntiles(A/B, Grid, N, Pos1/Pos2) :-
它应该返回我们可以找到瓷砖的可能位置:
>ntiles(2/1,3,2,P).
P=[1/1,1/3]?;
P=[1/1,2/3]?;
P=[2/1,1/3]?;
P=[2/1,2/3]?;
No.
我认为这是一个简单的递归问题,但我无法解决它。首先,我尝试仅将瓷砖定位在从位置 1/1 开始的单行上。这意味着我现在只待在第一排。我认为,如果我实现了这一点,就很容易为列实现它。
当您检查我的代码时,您会明白我的意思:
ntiles(A/B, G, N, K) :-
setof(X/Y, horizontal(A/B, G, N, X/Y), K).
horizontal(A/B, G, N, P1/P2) :-
N > 0,
P is A + 2,
P =< G,
horizontal(A/B, G, N-1, P/1).
此代码返回“假”。我希望将其返回 K 列表。您知道问题出在哪里吗?
你也能给我解决这个问题的见解吗?
提前致谢。