检查三角形数组中的邻接关系



对于一个学校项目,我必须编写饼干桶三角钉游戏,http://www.joenord.com/puzzles/peggame/3_mid_game.jpg 这里有一个链接。我做了一个三角形对称矩阵来表示电路板

|
|0
|12
|345
|6789.... 
public int get( int row, int col ) 
    {
        if (row >= col) // prevents array out of bounds 
            return matrix[row][col];
        else
            return matrix[col][row];
    }       // 

这是我get()函数,它是矩阵的形式。 如果我尝试访问get(Row, Column)并且row>column我会在所有方法中以这种方式访问get(column, row)它的集合。这样更容易防止越界的事情发生。三角形中的空点设置为 0,所有挂钩都设置为 1。我没有使用Boolean数组的原因不相关。该项目是一个人工智能项目,要开发启发式搜索算法,我需要访问彼此相邻的钉子数量。我可以通过简单地除以 total/2 来轻松防止大多数重复,因为它将计算两个方向上的每个相邻项。当我越过中线时,我不知道如何防止重复检查。它只在 0 2 5 和 9 位置上重要。如果我真的想,我可以为这些位置编写一组单独的规则,但这感觉不像是好的编码,并且不适用于不同大小的三角形。欢迎任何意见,如果您需要更多信息,请随时询问。

0,

2, 5, 9 不是算术级数。有限差分 2-0 = 2、5-2 = 3、9 - 5 = 4 是算术级数。所以序列是 0, 0 + 2 = 2, 2 + 3 = 5, 5 + 4 = 9, 9 + 5 = 14, 14 + 6 = 20, 等等。它们比三角形数字 1、3、6、10、15、21 等少 1。第 n 个三角形数有一个快捷表达式 n(n+1(/2(其中 n 从 1 开始,而不是 0(。所以你的数字是 n(n+1(/2 - 1 对于 n = 1, 2, 3, ...

无论如何,您遇到的情况应该告诉您设置它,以便get(row,col( == get(col,row(是一个坏主意。相反,我要做的是设置它,以便您的拼图从索引 1,1 开始并从那里增加;然后在矩阵条目 0,y 和 x,0 以及带有 col> 的任何行中输入特殊值 -1。您只需检查单元格中的值 -1 即可检查越界条件。然后要计算一个位置周围的钉子数量,您总是做同样的事情:检查所有四个相邻单元格是否有 1。

最新更新