prolog - 如何编写程序来查找完全封闭的瓷砖?

标签 prolog graph-theory

我正在尝试编写一个 prolog 程序,该程序可以在二维数组中找到完全被 b 或 w 包围的图块。

例如,给定这样的数据集:

[
    [b, w, +, +],
    [w, +, w, b],
    [+, w, b, +],
    [+, +, +, b],
]

它将返回另一个包含以下内容的变量:
[
    [-, -, -, -],
    [-, w, -, -],
    [-, -, -, b],
    [-, -, -, -],
]

也就是说,它取代了所有的+b完全包围与 b , 以及被 w 包围的那些,并用 - 替换其他所有内容.

任何人都可以就如何构建一个程序来做到这一点提出任何想法吗?

最佳答案

这可能会有所帮助:它采用您给出的表示,并返回一个列表,其元素的每个形式都是 [ColumnIndex, RowIndex, Value]。然后,您可以使用 member 查找特定行/列的元素。

encodearray( A, AA ) :- ( A, 0, 0, AA ).
encodearray( [], _, _, [] ).
encodearray( [[]|A], _, R, AA ) :- R1 is R+1, encodeArray( A, 0, R1, AA ).
encodearray( [[A|B]|X], C, R, [[C,R,A]|AA] ) :- C1 is C+1, encodeArray( [B|X], C1, R, AA ).

关于prolog - 如何编写程序来查找完全封闭的瓷砖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10067802/

相关文章:

prolog - 约束逻辑编程调度

prolog - 在 Prolog 中解析多位数的数字

macos - 通过 Mac 终端运行 SWI Prolog

prolog - 删除列表中的第一个出现 - prolog

algorithm - 有一个双向图,删除连接某些节点的路径的最佳方法?

java - 如何使范围树实现线程安全

c++ - 是否有一种(文学)算法可将每个传入边缘的节点拆分为一个节点?

prolog - 扁平化列表

algorithm - 给定一组可能的起始节点,找到访问某些节点并返回的最小路径

python - 区分同名节点的正确图形数据结构是什么?