Python 八皇后解法(非遞迴版本)
import Stack # 假設已經定義好棧類
def conflict(state, nextX):
'''判斷新皇后的落點是否與前一皇后衝突
1、如果新皇后與前一皇后在同一列,則 state[i] == nextX
2、如果新皇后與前一皇后在同一行,則 i == nextY
3、如果新皇后在前一皇后右對角線 ,則 nextX - state[i] == nextY - i
4、如果新皇后在前一皇后左對角線,則 state[i] - nextX == nextY - i
'''
nextY = len(state)
for i in range(nextY):
if abs(state[i] - nextX) in (0, nextY - i):
return True
return False
def queen(num = 8, state = ()):
st = Stack.Stack()
st.push([0,state]) # 每一個位置包含下一搜尋位置及相應的位置狀態資訊
while not st.is_empty():
now_queen = st.pop() # 從棧中彈出一個位置
for pos in range(now_queen[0], num):
temp_state = now_queen[1]
if not conflict(temp_state, pos):
if len(temp_state) == num - 1:
temp_state = temp_state + (pos,)
print (temp_state)
else:
now_queen[0] = pos + 1
st.push(now_queen)
next_queen = [0, temp_state + (pos,)]
st.push(next_queen)
相關文章
- 八皇后問題python解法Python
- python八皇后Python
- 快速排序【遞迴】【非遞迴】排序遞迴
- python-動態規劃的遞迴、非遞迴實現Python動態規劃遞迴
- 二叉樹的前中後序遍歷(遞迴和非遞迴版本)二叉樹遞迴
- 資料結構與演算法——歸併排序: 陣列&連結串列&遞迴&非遞迴解法全家桶資料結構演算法排序陣列遞迴
- 資料結構和演算法——遞迴-八皇后問題(回溯演算法)資料結構演算法遞迴
- 遍歷二叉樹-------遞迴&非遞迴二叉樹遞迴
- python實現二叉樹及其七種遍歷方式(遞迴+非遞迴)Python二叉樹遞迴
- 【C++】翻轉二叉樹(遞迴、非遞迴)C++二叉樹遞迴
- 快速排序(遞迴及非遞迴演算法原始碼)排序遞迴演算法原始碼
- 揹包問題的遞迴與非遞迴演算法遞迴演算法
- Vue3.0的遞迴監聽和非遞迴監聽Vue遞迴
- 八皇后||演算法演算法
- 資料結構-樹以及深度、廣度優先遍歷(遞迴和非遞迴,python實現)資料結構遞迴Python
- C#資料結構與演算法系列(十四):遞迴——八皇后問題(回溯演算法)C#資料結構演算法遞迴
- 遞迴和非遞迴分別實現求n的階乘遞迴
- 二叉樹的四種遍歷(遞迴與非遞迴)二叉樹遞迴
- Android遍歷所有控制元件的遞迴和非遞迴實現Android控制元件遞迴
- 最新情報:所有的遞迴都可以改寫成非遞迴?遞迴
- js深度繼承的非遞迴方法JS繼承遞迴
- 歸併排序的非遞迴實現排序遞迴
- 洛谷八皇后問題
- P1219 八皇后(dfs)
- 二分法的簡單實現——-遞迴和非遞迴遞迴
- 遞迴轉非遞迴 棧模擬 Recursive to Non-recursive stack simulated 總結遞迴
- 遍歷二叉樹的遞迴與非遞迴程式碼實現二叉樹遞迴
- 二十一、氣泡排序演算法——JAVA實現(遞迴與非遞迴)排序演算法Java遞迴
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- 資料結構:歸併排序(非遞迴)資料結構排序遞迴
- 洛谷 P1219 八皇后
- 7-22 n queens (10分) 八皇后(n皇后)問題
- 1.5.6 python遞迴函式Python遞迴函式
- 13.0、python遞迴函式Python遞迴函式
- 刷題系列 - Python用非遞迴實現二叉樹前序遍歷Python遞迴二叉樹
- 非遞迴先序遍歷二叉樹遞迴二叉樹
- 五大演算法程式碼模板(DFS 遞迴非遞迴都算上,是六個)演算法遞迴
- 八皇后問題分析和實現