我需要写点像普罗洛格号的扫雷车。我可以用“普通”语言来做这件事,但是当我尝试用prolog开始编码时,我完全不知道如何开始。我需要一些提示。输入规范:
板大小:m×n (m,n∈{1,...,8}),三元组列表(i,j,k),其中i∈{1,…,m},j∈{1,…,n},k∈{1,...,8})。
例如:
5
5
[(1,1,1), (2,3,3), (2,5,2), (3,2,2), (3,4,4), (4,1,1), (4,3,1), (5,5,2)].输出:数字和原子的列表( * )(用于宝藏)和(用于空白字段)。它是谜题解的一种表示。
这个谜题的规则:在一块木板的20个领域里有隐藏的宝藏。字段中的数字代表有多少相邻字段有一个宝藏。在有数字的田野里没有宝藏。用宝物标记所有的田地。
你需要猜出有多少宝藏隐藏在对角线上。
如有任何建议,我将不胜感激。我不想要完全的解决方案,我想自己写,但没有线索,我无法做到这一点。
发布于 2012-04-02 21:11:53
矩阵通常作为列表处理,可以使用length/2和findall/3构建。
build_matrix(NRows, NCols, Mat) :-
findall(Row, (between(1, NRows, _), length(Row, NCols)), Mat).通过坐标访问元素可以使用nth1完成(另一个答案请参见here,在这里您可以找到一些细节:参见单元格/3)。
然后,放置所有的三重限制:有有限的方式消费‘隐藏的宝藏’计数器,让Prolog搜索所有的方式,列举邻接。
处理三元组列表,将每个计数器放置在兼容的单元格中,并使用递归谓词。当列表结束时,你可以猜到。
为了使代码更简单,不要担心索引超出了矩阵的界限,请记住,在搜索时失败是“正常的”。
https://stackoverflow.com/questions/9983206
复制相似问题