你好,我正在练习使用 C++ 中的二维数组,我的问题是例如,如果我想检查 4 的北、东、南、西是否有 0 或 11 作为邻居,它应该返回 false。 这是我的如果
DX:AX = AX : r/m16 <-- 16bit(word) operand
现在我的问题是因为 4 以西和 4 以北超出范围,它永远不会返回 false。 如何优化我的 if 条件以使其返回 false? 这是我的二维数组
stack SEGMENT PARA STACk
db ?
stack ENDS
data SEGMENT PARA PUBLIC
db ?
data ENDS
code SEGMENT PARA PUBLIC
ASSUME ss: stack, ds: data, cs: code
_start:
mov ax, data
mov ds, ax
mov ax, 10
mov dx, 2
div dx
;output number 10/2 = 5 + 48 = 53(Ascii code '5')
add ax, 48
mov dx, ax
mov ah, 02h
int 21h
mov ah, 04ch
mov al, 1
int 21h
code ENDS
END _start
答案 0 :(得分:1)
TL;博士 你缺少边界条件
// Boundary Conditions
if( i == ROW || j == COL || i < 0 || j < 0 )
return false;
根据问题,矩阵定义为
#define ROW 4
#define COL 4
int grid[ROW][COL] = {{ 4, 11, 1, 1 },
{ 0, 0, 1, 0 },
{ 0, 1, 5, 0},
{ 0, 5, 0,0 } };
给定一个位于 row i
和 col j
的单元格,用协调 i, j
表示,二维数组中的可视化将如下所示
i-1, j-1 i-1, j i-1,j+1
i, j-1 i, j i,j+1
i+1, j-1 i+1, j i+1,j+1
从上面我们现在可以推断出对应的坐标/点参考给定的 i,j
i,j ---> North( i-1, j )
i,j ---> South( i+1, j )
i,j ---> East( i , j+1)
i,j ---> West( i , j-1)
现在我们可以编写一个小函数来检查由 i 和 j 表示的任何单元格的给定值是否为真,下面的函数执行类似的操作.. 检查提供的坐标是否在边界内以及 {{ 1}} 匹配我们需要匹配的内容
grid[j]j]
现在是编写北、南、西、东计算代码并将它们公开为不错的函数的时候了,
bool Check( int grid[ROW][COL], int expected, int i, int j )
{
// Boundary Conditions
if( i == ROW || j == COL || i < 0 || j < 0 )
return false;
return ( grid[i][j] == expected );
}
上面的每个函数都暴露了一个更好的接口来处理逻辑程序想要做什么
bool northHas( int grid[ROW][COL], int expected, int i, int j )
{
return check(grid, expected, i-1, j );
}
bool southHas( int grid[ROW][COL], int expected, int i, int j )
{
return check(grid, expected, i+1, j );
}
bool eastHas( int grid[ROW][COL], int expected, int i, int j )
{
return check(grid, expected, i, j+1 );
}
bool westHas( int grid[ROW][COL], int expected, int i, int j )
{
return check(grid, expected, i, j-1 );
}