Python使用元組+遞迴簡單解決八皇后問題
阿新 • • 發佈:2019-02-02
一、基本思想是用元素進入元組的先後表明行號,具體數值表明列號,註釋很清楚了就不再說明,直接貼程式碼了
import time def yesnot(state,nextX): # 判斷下一個皇后在當前狀態下時候可放 nextY = len(state) #存放已經放了幾行 for i in range(nextY): #測試當前皇后與之前的是否衝突 if abs(nextX - state[i]) in (0,nextY - i): #abs(nextX - state[i])表明橫向距離,in(0,nextY - i)表示0或extY - i,0表明在同一列上,(nextY - i)表明在斜線上只要一個相等返回錯誤 return False return True #若未返回錯誤則新位置可放皇后,返回正確 def queen(state,num): for i in range(num): #遍歷尋找可以放的地點 if yesnot(state, i): #判斷i點時候和以往皇后是否衝突 if len(state) == num - 1: #如果皇后數量時候已滿 print(state + (i,)) #滿足條件新增到元組並輸出 else: queen(state + (i,), num) #不衝突把新的皇后位置新增到元組進行遞迴 t = time.time() #程式開始時間 queen((),8) #執行八皇后問題,8是皇后數 t2 = time.time() #程式結束時間 print(t2-t) #程式執行時間
三、我的程式執行12皇后時python版耗時13~14s,java版耗時400ms左右,不知道為什麼相同程式碼python耗時遠高於java,如果有大佬知道歡迎指導。我知道python執行會慢一些但是沒想到慢這麼多,如果30或者50,100皇后會有多大差距呢?