gpt4 book ai didi

algorithm - 如何在不包含负值的情况下获取矩阵中的所有邻居索引?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:50:45 26 4
gpt4 key购买 nike

我正在努力寻找 (usize, usize) 中给定位置(即 N )的所有直接邻居x M矩阵。

矩阵提供了一种方法get(p: Position) -> Option<T>它在哪里进行边界检查并返回 None如果位置超出范围。这意味着不需要检查上限,但仍然需要检查下限。也就是说,它不会下溢 0在任何方向。

我的第一次尝试是遍历切片 &[-1, 0, 1]并使用 checked_add , 但这不起作用,因为 -1不是 usize .

我的下一次尝试是从我的位置(xy)中减去 1,然后遍历切片 &[0, 1, 2] , 但这对位置 (0, _) 不起作用或 (_, 0) .

我准备了一个playground ,其中一个人只能实现一个功能。 (我希望我的测试是正确的)

type Position = (usize, usize) //x, y

fn get_neighbours(p: Position) -> impl Iterator<Item = Position> {
unimplemented!()
}

(如果需要,impl Iterator 可以替换为 Vec)。

最佳答案

你只需要使用if表达式来处理坐标为零的特殊情况,例如

fn get_neighbours(p: Position) -> impl Iterator<Item = Position> {
let m_range = if p.0 > 0 { p.0 - 1..p.0 + 2 } else { 0..2 };
let n_range = if p.1 > 0 { p.1 - 1..p.1 + 2 } else { 0..2 };
m_range
.flat_map(move |m| n_range.clone().map(move |n| (m, n)))
.filter(move |&q| p != q)
}

关于algorithm - 如何在不包含负值的情况下获取矩阵中的所有邻居索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52586819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com