给定维数和每个数组的大小作为变量,我如何遍历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发布于 2012-12-26 20:00:17
你可以使用递归,对于每个维度“猜测”它的索引,并递归地调用一个较小的问题,类似于(peudo代码):
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是当前访问的dimensionsize,n是inputres是表示当前部分结果的向量使用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上提供了完整的代码和一个简单的示例
发布于 2016-12-01 07:18:19
Python代码:
def nd_range(start, stop, dims):
if not dims:
yield ()
return
for outer in nd_range(start, stop, dims - 1):
for inner in range(start, stop):
yield outer + (inner,)示例:
print(list(nd_range(0, 3, 3)))(0,0,0),(0,0,1),(0,0,2),(0,1,0),(0,1,2),(0,2,0),(0,2,1),(0,2,2),(1,0,0),(1,0,1),(1,0,2),(1,1,0),(1,1,0),(1,1,1)1,2),(1,2,0),(1,2,1),(1,2,2),(2,0,0),(2,0,2),(2,1,0),(2,1,1),(2,1,2),(2,2,0),(2,2,1),(2,2,2)
发布于 2012-12-26 20:07:56
你可以使用递归。
iterate_n(array, n)
if n == 0
do something with the element
else
for ary in array
iterate_n(ary, n-1)
end_for
end_if
endhttps://stackoverflow.com/questions/14040260
复制相似问题