说我有以下内容:
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语句。
答案 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);
这可以防止将相同的数字视为相邻数字。