c - 给定随机起始元素,精确迭代圆形二维数组的所有元素一次

标签 c multidimensional-array iteration

我们得到一个二维数组 A[n,m],其中包含 n 行和 m 列以及该数组的一个元素随机选择R。 将数组视为循环数组,因为当我们访问 A[n-1, m-1] 时,我们访问的下一个元素将是 A[0, 0]

从元素 R 开始,我们希望仅访问每个元素一次,并在移动到下一个元素之前调用函数 foo()

以下是我的第一个实现,但有一个错误。错误是,如果我们从 0n-1 之间的行 x 开始,我们将不会访问 0< 中的元素 到该列中的 x-1

// Init - pretend rand() always returns valid index in range
curr_row = rand();
curr_col = rand();

// Look at each column once
for (int i = 0; i < m; ++i) 
{
  for (; curr_row < n; ++curr_row) 
  {
    foo(A[curr_row][curr_col]);
  }
  curr_row = 0;
  curr_col = (curr_col + 1) % m;
}

什么是一种干净的方式来进行这种遍历,以便我们满足上述要求?

最佳答案

只需移至下一个索引,然后检查是否回到起点,在这种情况下,停止:

// should be something that guarantees in-range indices
curr_row = rand();
curr_col = rand();
int i = curr_row, j = curr_col;
do {
    foo(A[i][j]);
    ++j;
    if (j == n) {
        j = 0;
        ++i;
        if (i == m) {
            i = 0;
        }
    }
}while(i != curr_row || j != curr_col);

这并不执行您的实现的操作,而是执行问题标题所要求的操作。

关于c - 给定随机起始元素,精确迭代圆形二维数组的所有元素一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14247250/

相关文章:

c - 数组将 2 个值存储在一个 "place"

c - C 语法中二维数组整行的地址

PHP 将两个关联数组合并为一个数组

arrays - 具有可选子集的无序集(数组)上的匹配表

c - 有没有办法循环使用 C 中的四个基本操作?

arrays - 迭代时更新 golang 数组

OpenCV:矩阵迭代

c - 释放分配的指针

c - 为什么这段代码会发生内存泄漏?

c - 如何使用 C 中的文本文件循环填充字符数组