Циклическая (однонаправленная) Ханойская башня Предложения?

Вот код Python, который я написал для задачи о Ханойской башне, где башня должна быть перенесена с левого колышка на средний, используя правый колышек в качестве запасного:

def hanoi(n, origin = "1", destination = "2", spare = "3"):

    if n == 1:
        print ("Move disk from", origin, "to", destination)

    else:
        hanoi(n-1, origin, spare, destination)
        hanoi(1, origin, destination, spare)
        hanoi(n-1, spare, destination, origin)

hanoi(3)

Теперь мой профессор хочет, чтобы я реализовал его так, чтобы законные перемещения были только с башни 1 к 2, башни 2 к 3 и башни 3 к 1. Все остальные правила одинаковы.

1 ответ

Как всегда с этой проблемой, нужно мыслить индуктивно. Начните с наименьшей из возможных башен для перемещения, затем спросите себя: если я могу это сделать, как я могу переместить большую башню?

Поскольку перемещение башни первого размера тривиально, начнем с башни второго размера:

Базовый вариант

Перемещение башни размера два на один колышек вправо:

|  -  |     |     |
| --- |     |     |
-------------------
Step 1:

|     |     |     |   
| --- |  -  |     |
-------------------
Step 2:

|     |     |     |
| --- |     |  -  |
-------------------
Step 3:

|     |     |     |
|     | --- |  -  |
-------------------
Step 4:

|     |     |     |
|  -  | --- |     |
-------------------
Step 5:

|     |  -  |     |
|     | --- |     |
-------------------

Это демонстрирует, как вы можете переместить башню на один колышек вправо. Конечно, это также может быть использовано для перемещения башни со второго на третий или с третьего на первый колышек.

шаг

Допустим, вы знаете, как переместить башню размером n на один колышек вправо, вот как вы делаете это для n + 1 дисков:

|    -    |         |         | Move the small tower one peg to the right
|   ---   |         |         |
|  -----  |         |         |
| ------- |         |         |
-------------------------------
Step 1:

|         |         |         | Move it another step to the right
|         |    -    |         |
|         |   ---   |         |
| ------- |  -----  |         |
-------------------------------
Step 2:

|         |         |         | Let's move the n+1 disk one peg to the right
|         |         |    -    |
|         |         |   ---   |
| ------- |         |  -----  |
-------------------------------
Step 3:

|         |         |         | Move the small tower to the right
|         |         |    -    |
|         |         |   ---   |
|         | ------- |  -----  |
-------------------------------
Step 4: 

|         |         |         | Move the small tower another peg to the right
|    -    |         |         |
|   ---   |         |         |
|  -----  | ------- |         |
-------------------------------
Final step:

|         |    -    |         | 
|         |   ---   |         |
|         |  -----  |         |
|         | ------- |         |
-------------------------------
Другие вопросы по тегам