随手记——神奇的现象,二维数组

做一道DP的题目,需要标记二维数组中,以某个点为中心边上的八个点(象棋中的“马”下一步可走的位置),然后是这样写的。

void make_mark(int x,int y) {
    sign[x - 1][y - 2] = 1;
    sign[x - 1][y + 2] = 1;
    sign[x + 1][y + 2] = 1;
    sign[x + 1][y - 2] = 1;

    sign[x + 2][y - 1] = 1;
    sign[x + 2][y + 1] = 1;
    sign[x - 2][y - 1] = 1;
    sign[x - 2][y + 1] = 1;

    sign[x][y] = 1;
}

好像是没什么,但是没有处理下标越界的问题。然后OJ还过了。然后我仔细研究了一下。它们的内存地址是连续的,然后数组等价于指针呐,那就很好理解了。

红线内的1,从上往下是sign[x-2][y-1],sign[x-1][y-2],sign[x+1][y-2],sign[x+1][y+2]。

至于OJ过了的原因,因为我数组开大了几个,这几个 1 没有影响。

除非你能几个数组确保不会越界,不会影响到题目,否则还是好好做越界判断好一点。

猜你喜欢

转载自www.cnblogs.com/czc1999/p/10361280.html