检查三角形阵列中的邻接性

时间:2015-04-09 05:56:07

标签: java algorithm multidimensional-array artificial-intelligence

对于一个学校项目,我不得不对饼干桶三角钉游戏进行编码,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数组的无关原因。该项目是一个AI项目,为了开发一种启发式搜索算法,我需要访问彼此相邻的桩的数量。我可以通过简单地除以总数/ 2来轻松地防止大多数重复,因为它将计算两个方向上的每个相邻数据。当我越过中间线时,我不知道如何防止重复检查。它只对0 2 5和9位置有用。如果我真的想要为这些位置编写一套单独的规则,但这并不是很好的编码,并且不适用于不同大小的三角形。任何输入都是受欢迎的,如果您需要更多信息,请随时询问。

1 个答案:

答案 0 :(得分:0)

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更​​小一个,第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开始并从那里开始增加;然后将特殊值-1放在矩阵条目0,y和x,0以及任何col>行。您可以通过检查单元格中的值-1来检查超出范围的条件。然后计算一个位置周围的钉子数量,你总是做同样的事情:检查所有四个相邻的单元格是否为1。