0
所以,我總共有n
個問題,每個問題都有一些問題。python回溯字典
我要創建的是有u
和v
問題之間積累x
和y
點之間問題的所有可能的集合,和我有使用回溯做。爲此,我想了解如何使用字典,例如:questions = {「Q1」:5,「Q2」:3,「Q3」:4,「Q4」:10,「Q5」:6,「Q6 「:7},所以有6個問題,第一個問題(」Q1「)有5個點等等
我開始編碼,但我不知道如何創建回溯函數本身,我不明白如果有意義的話,如何去做所有的可能性。
questions = {"Q1":5, "Q2":3, "Q3": 4, "Q4" : 10, "Q5" : 6, "Q6" : 7}
u = 3 #
v = 5 # between u and v questions
x = 5 #
y = 100 #between x and y points
def get_points(ar):
s = 0
for key, value in ar.items():
s = s + int(value)
return s
def get_NOQuestions(ar):
return len(ar)
def reject(candidate):
if (get_points(candidate) > y and get_NOQuestions(candidate) < v) or (get_NOQuestions(candidate) >= v and get_points(candidate) < x):
return False
return True
def accept(candidate):
if get_points(candidate) >= x and get_points (candidate) <= y and get_NOQuestions(candidate) >= u and get_NOQuestions(candidate) <= v:
return True
return False
def output(candidate):
print(candidate)
ar = {}
def backtracking(k):
for key, value in questions.items():
ar[key] = value
if not reject(ar):
if accept(ar):
output(ar)
else:
backtracking(k+1)
backtracking(0)
這是我這麼遠,顯然是「回溯」功能不起作用,因爲它不經過所有的可能性(而不是它應該以這種形式,它只是一個供)
我在考慮可能對字典中的所有項目進行排列(u
和v
之間的長度排列),並獲得滿足「接受」函數中條件的條件,但確實有更明智的方法來完成此操作。
所以你說實際的回溯函數本身經歷了所有的可能性,只是我的接受和拒絕函數是不好的?因爲我懷疑是這種情況 感謝您的建議btw :) – Hansewl