Skip to main content

atcoder/lib/
grid.rs

1//! 2次元グリッドの添字と移動方向です。
2//!
3//! 各方向は `(行方向, 列方向)` の符号付きオフセットです。現在位置に足して隣接座標を作り、
4//! グリッドの行数・列数と照らして範囲内かどうかを呼び出し側で確認します。
5
6/// 4近傍への `(行, 列)` オフセットを、右、上、左、下の順に表します。
7///
8/// 行番号が下向きに増える一般的な配列座標系を想定しています。
9///
10/// # Examples
11///
12/// ```
13/// use atcoder::grid::DIRECTIONS_4;
14///
15/// let (row, col) = (2_isize, 3_isize);
16/// let right = (row + DIRECTIONS_4[0].0, col + DIRECTIONS_4[0].1);
17/// assert_eq!(right, (2, 4));
18/// ```
19pub const DIRECTIONS_4: [(isize, isize); 4] = [(0, 1), (-1, 0), (0, -1), (1, 0)];
20
21/// 8近傍への `(行, 列)` オフセットを、右、上、左、下、右上、左上、左下、右下の順に表します。
22///
23/// 行番号が下向きに増える一般的な配列座標系を想定しています。盤面外へ移動する場合があるため、
24/// オフセットを加えた後に行・列の範囲を確認してください。
25pub const DIRECTIONS_8: [(isize, isize); 8] = [
26    (0, 1),
27    (-1, 0),
28    (0, -1),
29    (1, 0),
30    (-1, 1),
31    (-1, -1),
32    (1, -1),
33    (1, 1),
34];