我正在嘗試暴力解決 N 皇后國(guó)際象棋問(wèn)題https://en.wikipedia.org/wiki/Eight_queens_puzzle我的代碼正在工作,但是當(dāng)我嘗試返回解決方案數(shù)據(jù)結(jié)構(gòu)時(shí),會(huì)出現(xiàn)異常行為。包含解決方案的列表在某些時(shí)候被覆蓋或損壞。我嘗試過(guò)使用多種不同的數(shù)據(jù)結(jié)構(gòu)列表、字典、集合,并且都具有相同的結(jié)果。輸出應(yīng)該是[[1, 3, 0, 2], [1, 3, 0, 2], [1, 3, 0, 2], [1, 3, 0, 2], [1, 3, 0, 2], [1, 3, 0, 2], [1, 3, 0, 2], [1, 3, 0, 2]]但目前正在返回[[3, 3, 3, 3], [3, 3, 3, 3], [3, 3, 3, 3], [3, 3, 3, 3], [3, 3, 3, 3], [3, 3, 3, 3], [3, 3, 3, 3], [3, 3, 3, 3]]import numpy as np# Validation Functionsdef checkRows(state): """ Check only 1 queen per row """ for row in state: if sum(row) > 1: return False return Truedef checkCols(state): """ Check only 1 queen exists in a column """ for i in range(0,len(state)): count = 0 for j in range(0,len(state)): #print(state[j][i]) count = count + state[j][i] if count > 1: return False return True def checkDiag(state): """ Checks only 1 queen exists per diagonal https://stackoverflow.com/questions/6313308/get-all-the-diagonals-in-a-matrix-list-of-lists-in-python """ # Alter dimensions as needed n = len(state) x,y = n,n # incoming state list a = np.array(state) diags = [a[::-1,:].diagonal(i) for i in range(-a.shape[0]+1,a.shape[1])] diags.extend(a.diagonal(i) for i in range(a.shape[1]-1,-a.shape[0],-1)) for n in diags: if sum(n) > 1: #if any of the diagonals sums to more than 1 there must be more than 1 queen in that diagonal return False return True def checkState(state): """ Returns false on one or more failures """ return checkRows(state) and checkCols(state) and checkDiag(state)
- 1 回答
- 0 關(guān)注
- 173 瀏覽
添加回答
舉報(bào)
0/150
提交
取消