2013-02-11 15 views
0

我有一個巨大的2D矩陣,代表3D遊戲的2D地形 - 牆壁和各種類型的地板(泥土,岩石等)。 讓我們舉例說,有一個4x9的岩石地板面積。我需要在4x9空間的每個3x3區域的中心放置一個對象,並在解析和排除3x3區域後,在每個1x1區域放置一個對象。給定一個較大的二維矩陣,我可以唯一地擬合多少個尺寸較小的二維矩陣?

結果應該是放置3x3模板的3個對象和放置1x1模板的9個對象。

什麼是最有效的方法來實現這個算法?

+0

這是「製造變化」一2D版本? – Mehrdad 2013-02-11 06:06:14

+0

@BobMurphy:說實話,我真的很難從哪裏開始。在我的腦海中,我想我需要另一個矩陣來將單位標記爲「已使用」,例如,當我將它們作爲3x3模板的一部分時。但感覺凌亂。 – 2013-02-11 06:17:39

回答

1

canPlace成爲BST座標。

for (x = 0:w) 
for (y = 0:h) 
    shouldPlace = true 
    for (x2 = -1:1) 
    for (y2 = -1:1) 
    if (grid[x+x2][y+y2].isObstruction()) 
     shouldPlace = false 
    if (shouldPlace) 
    canPlace.add((x,y)) 

上述複雜O(n^2 log n)

遞歸嘗試所有canPlace位置放置3x3的對象。

當你這樣做時,標記你放置它的區域被阻擋,並且在放置之前檢查是否阻塞。

以上覆雜度=? (更可能的名次使我們能夠找到一個解決方案很快)

for (x = 0:w) 
for (y = 0:h) 
    if (grid[x][y].isEmpty()) 
    place1x1(x, y) 

以上覆雜= O(n^2)

總複雜= O(n^2 log n + ?)

+0

這不會嘗試將2個3x3模板放置在例如3x4區域內,因爲它不排除現在使用的第一個3x3模板中的xy單元放置? 或者你只是沒有在這裏顯示? – 2013-02-11 06:30:23

+0

@ S.Richmond編輯。 – Dukeling 2013-02-11 06:33:16

+0

完美的感謝伴侶。 – 2013-02-11 06:48:52