2015-10-26 118 views
1

我正在研究一個問題並在C++中實現一個算法。該算法需要一個數據結構,其中它類似於二維數組(例如20x20數組)。主要的不同之處在於每個細胞必須連接八個細胞周圍(即上,下,左,右和四角)。C++中的數據結構

每個成員的狀態將根據鄰居的數據更改而改變。所以,每個細胞都在動態增長。每個小區都需要不斷檢查其所有鄰居的數據。

基於這個要求,我想象這個數據結構是圓形的,就像一個沒有邊的圓環或百吉餅,這樣每個單元就相互連接了。

關於這個數據結構表示的任何想法?我正在考慮使用鄰接鏈表的列表,其中每個成員都包含周圍八個鄰居的鏈表。你怎麼看?我在正確的軌道上嗎?

+0

選擇數據結構的標準之一是如何使用它。 –

+0

「我在正確的軌道上嗎?」是。 – axiom

+0

我不確定是否有足夠的信息可以幫助。在二維數組中尋找相鄰的鄰居看起來微不足道,即使你想包裝邊緣。 –

回答

2

尋找一個生命遊戲的實現,它用零和一個做這個。除非通過將解決方案融合到每個迭代的一組約束來完成一些非常複雜的工作,否則每次都會遍歷數組,並引用最後一代完整代碼,並更新所有內容以在每個循環結束時創建新一代。

+0

謝謝,這正是我需要實現的。 – MLAC

+0

@MLAC那麼接受答案。 :P –

+0

謝謝...我是新來的,不知道我需要點擊複選標記才能接受。 – MLAC

1

這主要取決於你的問題,但我有關於鄰接鏈表的懷疑。如果你的鄰居動態增長,這樣會更合適,但在這種情況下,它們似乎是固定的。所以你不妨使用一個指向你的鄰居的數組。

1

問題聲明似乎不是很清楚:

每個成員的狀態將變爲根據鄰居的數據變化。所以,每個細胞都在動態增長。每個小區都需要不斷檢查其所有鄰居的數據。

這實際上是什麼意思?讓我們假設只有一個值發生了變化。那麼所有的鄰居都應該改變,所有的鄰居都會改變,直到所有的值都改變了。但是,如果原始價值改變後,它的鄰居會發生變化,它是否會再次發生變化(並且無限期地變化 - 聽起來像個壞主意)?

什麼樣:我們有1×4 2D陣列A B C D,其中A爲B和d,以及A和C的B的鄰居的一個簡單的例子,等等

說變化。 B和D也應該如此。現在,C應該改變 - 是否應該根據B和D的變化立即改變?或B先,D秒?或者是什麼?

是什麼意思?constantlydynamically在您的問題的含義?是否有時間步驟,例如

time 1: a cell changes 
time 2: all immediate neighbours change simultaneously 
time 3: neighbours of immediate neighbours change 
     (and what about the original cell at this point?) 
time 4: etc. 

在大多數情況下,我(大多數其他)提供一個基於2D的陣列結構,但具有一個setter方法,其中,在調用時,會做變化傳播原子。但它的確取決於你的定義constantlydynamically