首页 > 解决方案 > 检查二维数组中每一行和每一列中的重复值

问题描述

我正在阅读有关游戏的 PDF 注释,Prolog其中Hitori我来到以下代码

abr([]).
abr([_]):-!.
abr([C, C|Cs]):- C \= 0, abr([C|Cs]).
abr([C1, C2|Cs]):- C1 \= C2, abr([C2|Cs]).

abs([]):- !.
abs([Cs|Css]):- abr(Cs), !, abs(Css).

ab(P):- transpose(C, Ccol), abs(C), abs(Ccol).

Parg 代表二维数组及其初始值

-1 -1 -1 -1
-1 -1 -1 -1
-1 -1 -1 -1
-1 -1 -1 -1

以及P每次都会改变它的值,所以它可以测试一个元素是否可以替换为zero

实际上我无法获得上面的代码,但我认为它会检查将元素更改为的验证zero

所以我的问题是上面的代码是做什么的?

标签: prolog

解决方案


首先,ab谓词的变量应该是Cnot P

谓词将ab/1整数方阵作为输入,格式为:

[[0, 4, 0], [2, 0, 8], [3, 6, 9]]

0如果任何行或列中没有两个连续的 s,则返回 true 。这一定与 Hitori 规则有关:“黑色单元格不能相邻,尽管它们可以彼此对角线”。


推荐阅读