我的查詢很難描述,所以我會盡量簡潔地解釋它。算法 - 有關Conways的極端細節生活遊戲
在康威生命遊戲,讓我們說我有一個地圖,像這樣:
_ _ _ _ _
_ _ _ _ _
U _ R Y _
_ T _ X _
_ Z _ C _
相反遍歷每一個細胞,包括死者那些不可能成爲相關的,比方說我把每一個生命第0代的細胞在LinkedList
之內。在每一代更新之後,我會遍歷整個LinkedList
並執行Conway的生命遊戲在其中的每個規則上的規則。這樣我就可以避免無緣無故地迭代大量死亡單元。
其中一個規則狀態爲a dead cell with 3 living neighbors becomes living
。由於我只是在迭代生活細胞在我的算法,只有我可以看死細胞的方式是通過查看我的LinkedList
中的活細胞的鄰居。我必須爲我的LinkedList
中的每個項目遍歷所有相鄰的單元格到該單元格,並且對於每個相鄰的單元格,我必須查看該單元格,計算它是否有三個鄰居,然後將其設置爲alive
,然後添加它作爲LinkedList
內的活細胞。
我的問題:
顯然,我的LinkedList
將很快得到雜亂無章,將不是在左上角 - >右下角的順序了。在上面提供的圖例中,我的linkedList
中的第一個單元可能是C
,第二個單元可能是R
,第三個單元可能是T
。隨着新細胞誕生我會以任何順序,他們在加入下一代將它們添加到我的LinkedList
和遍歷他們。
是由遊戲的規則,這一法律,或者我需要通過迭代整個二維數組從左上角到右下角?規則難以置信地模糊。
任何有兩個以上活的鄰居的活細胞都會死亡,好像是由於人口不足造成的。
任何有兩個或三個活的鄰居的活細胞都活在下一代。
任何有三個以上活着的鄰居的活細胞都會死亡,好像是由於人口過多一樣。
任何具有正好三個活的鄰居的死細胞變成活細胞,就像通過繁殖一樣。
我需要遍歷整個二維數組,做規則:
少於兩隻活鄰居去世的任何活細胞,彷彿引起下人口。
然後通過整個二維數組再次循環,做規則:
有兩個或三個鄰居住任何活細胞生命到下一代。
它到底有什麼關係嗎?我讀過這麼多的帖子,似乎沒有人提過這個話題。
謝謝。
該規則強加了評估順序。他們所需要的是雙緩衝。目前這一代存在於一個緩衝區中,您將下一代構建到不同的緩衝區中。請注意,儘管只有少數活細胞時您的算法會很有效,但當大部分細胞處於活動狀態時,其效率會非常低下。 – user3386109
如果你從上到下工作,你只需要一行作爲緩衝區(而不是空白字段)。 – MrSmith42
@ MrSmith42 - 只要你以某種線性方式遍歷,我認爲它很好,你只需要緩衝前一行。好主意! –