いろんな形のときの移動方向
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}};