arrays - 如何遍历 n 个维度?

标签 arrays algorithm loops dimension

在给定维数和每个变量的大小的情况下,如何迭代 n 维数组?

int n;
int size[n];

由于维数不固定,我不能为每个维写一个嵌套循环。我需要代码来处理每个维度。

此外,无论实际数据存储在 n 维数组还是包含大行中所有数据的平面数组中,都没有关系。两者都可以接受。

int data[16][42][14];   // n-dimensional array
int data[16 * 42 * 14]; // flat array containing the same data

最佳答案

您可以使用递归,为每个维度“猜测”其索引并递归调用一个较小的问题,类似于(伪代码):

iterate(d,n,size,res):
   if (d >= n): //stop clause
       print res
       return
   for each i from 0 to size[d]:
       res.append(i) //append the "guess" for this dimension
       iterate(d+1,n,size,res)
       res.removeLast //clean up environment before next iteration

哪里:

  • d为当前访问的维度
  • size,n为输入
  • res 是表示当前部分结果的向量

调用 iterate(0,n,size,res),其中 res 被初始化为一个空列表。


C++ 代码应该是这样的:

void iterate(int d,int n,int size[], int res[]) {
    if (d >= n) { //stop clause
       print(res,n);
       return;
   }
   for (int i = 0; i < size[d]; i++) { 
       res[d] = i;
       iterate(d+1,n,size,res);
   }
}

完整代码和简单示例可在 ideone 上获得

关于arrays - 如何遍历 n 个维度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14040260/

相关文章:

Javascript从本地file.txt创建数组

python - 返回输入的每个特征的计数数组

javascript - 当到达数组元素末尾时停止 Highchart

arrays - 为什么 bash 数组忽略换行符?

c# - 如何按顺序从字符串中获取找到的字符并保留重复项以将其添加到列表中而不覆盖以前的字符

algorithm - 在网格中查找 'lakes'(包含 0)?

sql - 重叠期 - 合并成一个连续的时间序列

php - 嵌套循环中 continue 2 和 break 之间的区别

PHP Foreach , 在哪里

java - 进行排序时还会检查输入的名称是否是单词(即,它包含字母而不是数字或标点符号等字符)