2017-04-12 90 views
0

所以,我在表面上有一個裂縫的2D向量,排列順序並不特別。如果一個裂縫靠得太近,另一個裂縫(比方說3個單位),那麼一個裂縫或兩個裂縫必須平移(最多8個單位)。 B型裂縫(已確定)不會被修改。到目前爲止,我的程序具有沿着或垂直於它們的等式線來平移裂縫的功能。動態更新數組元素(基於對其他元素的更改)

當我將一條裂縫從另一條裂縫轉移出來時,會出現問題,並且它太靠近不同的第三條裂縫。這需要第二次翻譯,如果問題沒有解決,也需要第三次翻譯。但是這個計算密集。如果在第一次迭代中移動278個裂縫,然後在第二次和第三次中移動另外278個裂縫,那麼在翻譯之前已經計算了277^3 = 21,253,933個計算(對於每個裂縫,必須計算到其他裂縫的距離) 。現在並不總是需要翻譯所有278個裂縫,但我需要一個更好的算法來移動所有裂縫,使它們之間至少有3個單位的距離。即使我嘗試使用動態搜索鄰域,它仍然需要遍歷所有278個裂縫。

請指教;我卡住了,我真的不知道如何繼續。

回答

0

你可以作爲面塊使用下面的結構

struct Square{ 
bool occupied; 
Square *crack; 
}; 

那麼你可能標誌着佔用的方格,在他們的裂縫:

surf[x][y].occupied = true; 

此外,你可以創建一個「領土」周圍你的破解,這將是充滿塊與

surf[x][y]->crack 

ie指向克拉克k,導致它不可用(或空,如果免費)

因此,當你開始遊戲,你可以簡單地開始構建每個裂縫的領土,直到發生衝突(領土已被佔領),在這種情況下,你可以將裂縫移開(不要忘記移動其領土)。 因此,你只需要檢查一個裂縫是否在另一個裂縫的範圍內,如果是的話,你應該移動它(只是搜索周圍的空方塊)。當成功移動到空方塊(或超出移動限制)時,您現在可以創建自己的區域。如果在建立領土時遇到了已經有地區的廣場,只需使用指針移動它(及其領土)即可。這樣可以幫助您不必將每個裂縫與其他所有裂縫進行比較,並使流程更加高效。另外,如果你不想多次移動一個裂縫,你可以跟蹤它是否被另一個布爾值移動,並且你可以確定最佳方向。只是拋出一些想法。希望這可以幫助!

+0

而不是指針,你可以選擇使用兩個整數的裂縫的座標,或-1,如果空 –

+1

我認爲這是其實現爲裂縫正在從XML讀一個好主意。通過查看所讀入的每個裂縫的後面,所有裂縫將在最後一個裂縫達到時記錄下來。感謝您幫助我認識到這一點。 – masshakar