Для убийства монстра нужно использовать две пушки A и B (с N головами). Когда используется пистолет A, он режет 6 голов, но если монстр не умирает (нет голов> 0), он вырастет на 3 головы. Когда используется пистолет B, он режет 4 головы, но если монстр не умирает, он вырастает 2 головы. Если N <(количество головок, которое пистолет может разрезать), в этом случае пистолет не может быть использован. А если N = -1, то и монстр, и охотник умирают. </p>
Задача должна выяснить, возможно ли убить монстра, умирает ли охотник, пытаясь убить монстра, и по кратчайшему пути.
Я написал следующую программу на Python для решения вышеуказанной проблемы:
def A(heads, path):
if heads < -1:
path = []
return "Impossible to kill"
heads -= 6
path.append("A")
if heads == 0:
print path
path = []
return "Monster dies"
if heads == -1:
return "Both monster and human die"
heads += 3
if A(heads, path)=="Monster dies" or B(heads, path) == "Monster dies":
return "Monster dies"
def B(heads, path):
if heads < -1:
path = []
return "Impossible to kill"
#print "B", path, heads
heads -= 4
path.append("B")
if heads == 0:
print path
path =[]
return "Monster dies"
if heads == -1:
return "Both monster and human die"
heads += 2
if A(heads, path)=="Monster dies" or B(heads, path) == "Monster dies":
return "Monster dies"
print A(10, [])
Пример данных (предоставлен вопрос):
Для N = 10 самый короткий путь - AAB.
Где в программе я ошибся и как лучше решить эту проблему?