給定乙個包含 m × n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞都具有乙個初始狀態:1 即為活細胞(live),或 0 即為死細胞(dead)。每個細胞與其八個相鄰位置(水平,垂直,對角線)的細胞都遵循以下四條生存定律:
如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡;
如果活細胞周圍八個位置有兩個或三個活細胞,則該位置活細胞仍然存活;
如果活細胞周圍八個位置有超過三個活細胞,則該位置活細胞死亡;
如果死細胞周圍正好有三個活細胞,則該位置死細胞復活;
根據當前狀態,寫乙個函式來計算面板上所有細胞的下乙個(一次更新後的)狀態。下乙個狀態是通過將上述規則同時應用於當前狀態下的每個細胞所形成的,其中細胞的出生和死亡是同時發生的。
示例:輸入:
[[0,1,0],
[0,0,1],
[1,1,1],
[0,0,0]
]輸出:
[[0,0,0],
[1,0,1],
[0,1,1],
[0,1,0]
]高階:
你可以使用原地演算法解決本題嗎?請注意,面板上所有格仔需要同時被更新:你不能先更新某些格仔,然後使用它們的更新後的值再更新其他格仔。
本題中,我們使用二維陣列來表示面板。原則上,面板是無限的,但當活細胞侵占了面板邊界時會造成問題。你將如何解決這些問題?
我的解題思路:我是按照以下步驟開發的。
1.先通過當前細胞,遍歷他周圍的8個細胞,
--這裡用的是i 和 j 在(-1,0,1)這個資料迴圈,再配合行列加減的方式 ,就可以得到9個資料
--這裡要注意,當row == colum ==0時的元素要去掉,因為就是本身
--並且要判斷加減值是否不在這個二維陣列內 <0 和 >len(board)
2.count 每次遍歷8個之前,要重置,並在此期間進行存活細胞的統計。
3.再對整個二維陣列的所有元素進行遍歷
4.得到資料之後,賦值給乙個新的二維陣列,作為return的資料
class solution:
def gameoflife(self, board: list[list[int]]) -> none:
"""do not return anything, modify board in-place instead.
"""r_len=len(board)#獲得行的長度
c_len=len(board[0])#獲得列的長度
new_board=
#在獲得這個新的二維陣列的時候,卡殼了,對於python的二維陣列的理解還是有偏差
#另外就是對於深淺拷貝的問題,也是值得深思的
#深拷貝:修改新的 舊的不會變。
#淺拷貝:修改新的 舊的也會變。
#遍歷行
for row in range(len(board)):
nei=
for r in range(0,r_len):
for c in range(0,c_len):
count = 0
for j in range(-1,2):
if(r+j)<0 or (r+j)>r_len-1:
continue
else:
for i in range(-1,2):
if(c+i)<0 or(c+i)>c_len-1 or i==j==0:
continue
else:
if new_board[r+j][c+i]==1:
count+=1
if new_board[r][c] ==1:
if count<2:
board[r][c]=0
elif count == 2 or count ==3 :
board[r][c]=1
else:
board[r][c]=0
else:
if count==3:
board[r][c]=1
如何利用python實現生命遊戲
英國數學家約翰 何頓 康威在1970年發明了 the game of life,今天番茄加速就來分享下如何利用python實現生命遊戲,規則如下 每個細胞有兩種狀態 存活或死亡 每個細胞與以自身為中心的周圍八格細胞產生互動 當前細胞為存活狀態時,當周圍的存活細胞低於2個時 不包含2個 該細胞變成死亡...
康威生命遊戲的簡單實現
生命遊戲,數學家john conway發明的乙個遊戲,又稱康威生命演化,生命棋,細胞自動機。康威有許多好玩有趣的發明,最廣為人知的乙個是外觀數列 look and say 這裡不多說,另乙個就是生命遊戲 game of life 關於康威,摘錄一段wikipedia的敘述 約翰 何頓 康威 john...
Life Game生命遊戲的C 實現
因為上了鮑老師的課,每週都要做一次課堂練習。所以大三才想起來開c 的坑 是課上乙個半小時寫出來的。難免有考慮不周的地方。如果有什麼問題,請各位不吝賜教 首先解釋一下life game。開局一張棋盤,隨便放幾個棋子,然後每回合棋盤做一次更新,對棋盤的每個格仔來說,看它周圍的9個鄰居在舊棋盤中的狀態,有...