【发布时间】:2013-10-24 06:50:11
【问题描述】:
如果我们希望覆盖一个搜索空间,例如所有三元组(x, y, z),其中x、y 和z 介于1 和n 之间,我们可以使用嵌套循环来这样做:
for (int x = 1; x <= n; x++)
for (int y = 1; y <= n; y++)
for (int z = 1; z <= n; z++)
这会生成三元组:(1, 1, 1)、(1, 1, 2)、(1, 1, 3)、(1, 1, 4) 等,实际上是“深度优先搜索”或深度优先迭代。
有没有办法以更“广度优先”的方式进行迭代?这样的迭代将按类似于以下的顺序生成三元组:
(1, 1, 1)、(2, 1, 1)、(1, 2, 1)、(1, 1, 2)、(2, 2, 1)、(2, 1, 2)、(1, 2, 2)、(2, 2, 2)、(3, 1, 1)等...
还有生成这种模式的算法的名称吗?
【问题讨论】:
-
我建议只使用实际的广度优先搜索。从
(1, 1, 1)开始,每当您将(x, y, z)出队时,将尚未入队且未超出界限的(x+1, y, z)、(x, y+1, z)和(x, y, z+1)分别入队。
标签: algorithm search iteration