如果我們希望覆蓋搜索空間,好比說對所有三胞胎(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)',它們還沒有被排隊並且不會越過界限。 – user2357112