方向数组

8 分钟

在方格地图里做"上下左右走"这类模拟,若给每个方向写一段 if,代码又长又易错。更聪明的办法是用两个数组存下四个方向的行、列变化量,再用循环统一处理。

// 行 x 向下增大,列 y 向右增大
int dx[4] = {-1, 1, 0, 0};   // 上、下、左、右 的行变化
int dy[4] = {0, 0, -1, 1};   // 上、下、左、右 的列变化

for (int k = 0; k < 4; k++) {
    int nx = x + dx[k];      // 新行
    int ny = y + dy[k];      // 新列
    // 处理 (nx, ny)……
}

"上"是行号减 1(dx=-1),"下"是行号加 1(dx=1),"左右"改的是列号 dy。一个循环就把四个方向都试到了,每个格子处理四个方向是常数级

坑:dxdy 必须一一对应、下标同步,写错配对方向就全乱。要走八连通(含斜向)就扩成长度 8 的数组。约定好"行往下增、列往右增"并全程一致,是不出错的关键。方向数组是搜索、迷宫题的标准套路。

小纸条

向“下”走一步,行号是加 1 还是减 1?

登录 后可看答案