Прикреплённый файл «hmin.py»

Загрузка

   1 #!/usr/bin/python
   2 # coding: utf-8
   3 # vim:et:sw=4:
   4 
   5 '''
   6 Головоломка “Ханойские башни” состоит из трех стержней, пронумерованных числами 1, 2, 3. На стержень 1 надета пирамидка из n дисков различного диаметра в порядке возрастания диаметра. Диски можно перекладывать с одного стержня на другой по одному, при этом диск нельзя класть на диск меньшего диаметра. Необходимо переложить всю пирамидку со стержня 1 на стержень 3 за минимальное число перекладываний.
   7 Напишите программу, которая решает головоломку; для данного числа дисков n печатает последовательность перекладываний в формате a b c, где a — номер перекладываемого диска, b — номер стержня с которого снимается данный диск, c — номер стержня на который надевается данный диск. 
   8 '''
   9 
  10 import sys
  11 
  12 n=int(sys.argv[1])
  13 debug=len(sys.argv)>2
  14 
  15 abc=(range(n,0,-1),[],[])
  16 
  17 def other(k,l):
  18     return (0,2,1,0)[k+l]
  19 
  20 def passover(k,l):
  21     abc[l].append(abc[k].pop())
  22     if debug:
  23         print abc[0],abc[1],abc[2],k,l
  24     else:
  25         print abc[l][-1],k+1,l+1
  26 
  27 def hanoi(k,l,n):
  28     if n == 1:
  29         passover(k,l)
  30     else:
  31         hanoi(k,other(k,l),n-1)
  32         passover(k,l)
  33         hanoi(other(k,l),l,n-1)
  34 
  35 hanoi(0,2,n)

Прикреплённые файлы

Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.

Вам нельзя прикреплять файлы к этой странице.