所以我的问题如下:我想,给定网格中 X,Y 坐标的某个点,返回其所有相邻的单元格。
(注意:在以下示例中,我使用符号 UL = 左上角,UM = 上中,UR = 右上,L = 左,R = 右,BL = 左下,BM = 下-中间和 BR = 右下角。)
例如:
对于 5x5 网格上 (3,3) 处的元素 x
_ _ _ _ _
_ UL UM UR _
_ L x R _
_ BL BM BR _
_ _ _ _ _
对于 5x5 网格上 (1,1) 处的元素 x
x R _ _ _
BM BR _ _ _
_ _ _ _ _
_ _ _ _ _
_ _ _ _ _
现在,从上面的示例中可以看出,与当前元素 x 相邻的单元格数量可能会根据元素 x 本身的 X、Y 坐标而变化。
我想通过说指定坐标 X 左右的每个 X 以及指定坐标 Y 上方和下方的每个 Y 都应该在 1..N 的域中来解决这个问题,然后定义它们的实际值:
% Adj_cells/2 : (X,Y) coordinate, board width/height N
adjacent_cells((X,Y),N) :-
[Xleft,Xright,Yup,Ydown] #:: 1..N,
Xleft #= X-1, Xright #= X+1,
Yup #= Y-1, Ydown #= Y+1,
...
但是,当然,只要越过棋盘的边界,这就会评估为假。
我希望我不需要明确区分有关董事会边界的情况;相反,我试图找到一些东西,而不是在达到越界坐标时评估为假,只是“丢弃”该结果并尝试计算其他相邻单元格。
我确信在 ECLiPSe 中会有一个很好的小解决方案,但我已经搜索了文档并且 - 到目前为止 - 似乎无法找到适合我需要的东西。
任何帮助是极大的赞赏!