cp_library_rs/utils/
zigzag.rs

1//! 2次元グリッドをジグザグに走査する
2
3/// `H x W`領域をジグザグに操作する
4///
5/// ↓3x3領域の例
6/// ```text
7/// 123
8/// 654
9/// 789
10/// ```
11pub fn zigzag(H: usize, W: usize) -> impl Iterator<Item = (usize, usize)> {
12    (0..H).zip(1..).step_by(2).flat_map(move |(t, b)| {
13        (0..W)
14            .map(move |j| (t, j))
15            .chain((0..if b < H { W } else { 0 }).rev().map(move |j| (b, j)))
16    })
17}