いろんな形のときの移動方向

JOI 予選でハニカム構造が出てきて、手も足も出なかったのでつくってみた。
最初の2つは普通の正方形が並べられている形。
次がハニカム構造。4つめが三角形が敷き詰められた形。
上記のようなときにこれを使って探索とかすると、たぶん便利。

/*
四角形のとき
*/
const int sq_dx4[4] = {0, 1, 0, -1};
const int sq_dy4[4] = {-1, 0, 0, 1};

const int sq_dx8[8] = {0, 1, 1, 1, 0, -1, -1, -1};
const int sq_dy8[8] = {-1, -1, 0, 1, 1, 1, 0, -1};

//hx_dx[y % 2][i], hx_dy[y % 2][i]
/*
ハニカム構造のとき
[0,0][0,1][0,2][0,3]
  [1,0][1,1][1,2][1,3]
[2,0][2,1][2,2][2,3]
  [3,0][3,1][3,2][3,3]
[4,0][4,1][4,2][4,3]
*/
const int hx_dx[2][6] = {{-1, -1,  0, 1, 0, -1}, {-1,  0,  1, 1, 1, 0}};
const int hx_dy[2][6] = {{ 0, -1, -1, 0, 1,  1}, { 0, -1, -1, 0, 1, 1}};

/*
三角形が組み合わさった形
 x =  0 1 2 3 4 5 6 7 8 9 10 11
y = 0 ▽△▽△▽△▽△▽△▽△
y = 1 △▽△▽△▽△▽△▽△▽
y = 2 ▽△▽△▽△▽△▽△▽△
y = 3 △▽△▽△▽△▽△▽△▽
*/
//tr_dx[(x + y) % 2][i] tr_dy[(x + y) % 2][i]
const int tr_dx[2][3] = {{0, 1, -1}, {-1, 1, 0}};
const int tr_dy[2][3] = {{-1, 0, 0}, {0, 0, 1}};