用于确定网格中的两个数字是否相邻的算法

时间:2013-12-15 20:58:58

标签: algorithm grid

说我有以下内容:

std::vector<uint> tiles = {
     0, 1, 2, 3,
     4, 5, 6, 7,
     8, 9,10,11,
    12,13,14,15
}

是否有一种优雅的方法来确定某个数字是否与另一个数字相邻?例如,0,1,5,8,9但不是3将与4相邻。通过优雅的方式,我的意思是没有很多if语句。

3 个答案:

答案 0 :(得分:3)

如果您意识到a/4是图块的行而a%4就是列,则很容易:

abs(a/4 - b/4)==1 || abs(a%4 - b%4)==1

第一部分处理行,第二部分处理列

使用^只能使用水平或垂直,&&使用对角线

答案 1 :(得分:1)

row1=a/4;
col1=a%4;
row2=b/4;
col2=b/4;

return abs(row1-row2)<=1 && abs(col1-col2)<=1;

答案 2 :(得分:1)

rowDist = abs(a/4 - b/4);
colDist = abs(a%4 - b%4);

return (rowDist <= 1 && colDist <= 1) && (rowDist + colDist > 0);

这可以防止将相同的数字视为相邻数字。