Враховуючи розмір шахової дошки та початкове положення лицаря, обчисліть ймовірність того, що після k
переїздів лицар опиниться всередині шахової дошки.
Примітка:
Рицар робить усі 8 можливих рухів з однаковою ймовірністю.
Як тільки лицар знаходиться поза шаховою дошкою, він не може повернутися всередину.
Вхідні дані
Введення розділяються комами у формі:
l,k,x,y
де l
довжина та ширина шахової дошки k
- це кількість рухів, які зробить лицар, x
є х-положення початкової позиції лицаря та y
є y-положення початкового положення лицаря. Зауважте, що 0,0
це лівий нижній кут дошки та l-1,l-1
є верхній правий кут дошки.
Алгоритм:
Почніть з початкових координат лицаря. Зробіть усі можливі рухи для цієї позиції і помножте ці ходи з їх вірогідністю, для кожного переміщення рекурсивно викликайте функцію продовжуйте цей процес до досягнення умови припинення. Умова припинення - якщо лицар знаходиться поза шаховою дошкою, в цьому випадку поверніть 0, або бажана кількість рухів вичерпана, в цьому випадку поверніть 1.
Як ми можемо бачити, що поточний стан рекурсії залежить лише від поточних координат та кількості кроків, зроблених до цього часу. Тому ми можемо запам'ятати цю інформацію в табличній формі.
Кредит
Цей виклик походить із публікації в блозі crazyforcode.com, опублікованої під ліцензією CC BY-NC-ND 2.5 IN . Він був трохи змінений, щоб зробити його трохи складніше.