【发布时间】:2021-04-04 21:29:12
【问题描述】:
您好,我正在练习在 c++ 中使用 2d 数组,我的问题是,例如,如果我想检查 4 是否有 0 或 11 到北、东、南、西作为邻居,它应该返回 false。 这是我的如果
if((grid[0-1][0] == 0 || grid[0-1][0] == 11 ) &&
(grid[0+1][0] == 0 || grid[0+1][0] == 11 ) &&
(grid[0][0+1] == 0 || grid[0][0+1] ==11) &&
(grid[0][0-1] == 0 || grid[0][0-1] ==11 ))
{
return false;
}
现在我的问题是,由于 4 以西和 4 以北超出界限,它永远不会返回 false。 如何优化我的 if 条件以使其返回 false? 这是我的二维数组
int grid[ROW][COL] = {{ 4, 11, 1, 1 },
{ 0, 0, 1, 0 },
{ 0, 1, 5, 0},
{ 0, 5, 0,0 } };
【问题讨论】:
-
在检查邻居的值之前,您可以检查这些邻居是否真的存在。您可以从数组的边界计算它。
-
如何优化我的 if 条件 -- 让我们看看您未优化的
if条件,因为您发布的条件完全错误。如果不调用未定义的行为,您发布的代码将无法工作。grid[0-1][0]不是有效的数组访问。 -
给棋盘的所有边缘设置一个 1 单元格边框,并使用无效值流行边框单元格。如果您这样做,则不需要对越界检查进行特殊测试。例如,一个 8x8 的棋盘将是 10x10,边界单元格填充了无效的棋子值。
标签: c++ if-statement