【问题标题】:Navigating an Array with Column Boundaries使用列边界导航数组
【发布时间】:2013-10-07 10:07:14
【问题描述】:

假设有一个 N x N 的正方形二维数组,表示为一维数组。让数组为 5x5,如下所示,数组中的值不重要。

std::vector< int > array {
    0, 1, 2, 3, 4,
    5, 6, 7, 8, 9,
    0, 1, 2, 3, 4,
    5, 6, 7, 8, 9,
    0, 1, 2, 3, 4
};

如果我们说这个数组有 5 行 5 列,如何检测它们是否在行的边缘?例如,如果你在第 4 行 9 的索引上,你怎么知道你可以不改变行向左走,但向右走会前进到下一行? 如何访问一个单元格的邻域?第 4 行 9 所在的索引没有右邻。

我能想到的唯一方法是当前索引,在这种情况下是

int index = row * num_cols + col

并且可能使用模数(索引 % 5 == 0)来确定是否在边缘。但这并不能决定我们是向左还是向右。

【问题讨论】:

    标签: c++ arrays vector


    【解决方案1】:

    你的公式

    int index = row * num_cols + col;
    

    向上或向下相当于加/减num_cols

    是正确的。它的反面是

    int row = index / num_cols;
    int col = index % num_cols;
    

    (index % num_cols) == 0 时你知道你在左边。

    (index % num_cols) == num_cols-1 时,您知道自己处于正确的边缘。

    【讨论】:

      【解决方案2】:

      你可以使用

      int row = index / N;
      int col = index % N;
      

      获取行和列索引。例如,第 9 个条目的行索引为 9/5=1,列索引为 9%5=4。

      计算出(row, col) 坐标后,您可以确定它是否有左邻或右邻。当col == 0时,你没有左邻居;当col == N-1时,你没有合适的邻居。

      【讨论】:

        猜你喜欢
        • 2016-09-12
        • 1970-01-01
        • 2021-11-20
        • 2016-05-28
        • 1970-01-01
        • 1970-01-01
        • 2018-06-15
        • 2019-03-16
        • 1970-01-01
        相关资源
        最近更新 更多