【问题标题】:Check Adjacency in Triangle Array检查三角形数组中的相邻性
【发布时间】:2015-06-14 08:45:59
【问题描述】:

对于一个学校项目,我必须编写饼干桶三角钉游戏,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.....这听起来像一个等差数列;所以也许你可以想一个函数可以给你第 i 个元素的值
  • 我不访问 get(5th index) 我必须做 get(2,2),多亏了你,我才回答了我自己的问题。每当 a=b 调用单独的规则时。

标签: java algorithm multidimensional-array artificial-intelligence


【解决方案1】:

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 等。第 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 > row 的任何内容中。您可以通过检查单元格中的值 -1 来检查越界条件。然后要计算一个位置周围的钉子数量,您总是会做同样的事情:检查所有四个相邻单元格的 1。

【讨论】:

    猜你喜欢
    • 2015-10-15
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多