Разработка алгоритма решения игры Ханойские башни С++
Многие, наверное, знают эту игру. Есть три колышка, на первом стопка дисков, диаметр которых увеличивается к основанию стопки.
Необходимо переместить все эти диски на другой колышек. При этом нельзя перемещать одновременно более одного диска, нельзя класть больший диск над меньшим. Для временного размещения можно использовать третий колышек.
Эта задача решается очень просто – используем рекурсивную функцию. Рассмотрим сам алгоритм и реализацию в консольной программе на С++.
Допустим, нам необходимо переместить n дисков с колышка 1 на колышек 3.
При этом задача решается вот так:
Составим рекурсивную функцию с 4 параметрами:
1 – количество дисков, которое нужно переместить;
2 – номер колышка, на котором они находятся;
3 – номер колышка, на который нужно переместить;
4 – номер временного колышка.
Программа должна печатать инструкцию, куда и откуда нужно перемещать диски, например:
1 => 3
Это значит, что нужно переместить диск с колышка 1 на колышек 3.
Для 3 дисков должен получиться результат:
Многие, наверное, знают эту игру. Есть три колышка, на первом стопка дисков, диаметр которых увеличивается к основанию стопки.
Необходимо переместить все эти диски на другой колышек. При этом нельзя перемещать одновременно более одного диска, нельзя класть больший диск над меньшим. Для временного размещения можно использовать третий колышек.
Эта задача решается очень просто – используем рекурсивную функцию. Рассмотрим сам алгоритм и реализацию в консольной программе на С++.
Допустим, нам необходимо переместить n дисков с колышка 1 на колышек 3.
При этом задача решается вот так:
- Переместить n-1 дисков с колышка 1 на колышек 2, используя колышек 3, как временное размещение.
- Переместить последний наибольший диск с колышка 1 на колышек3.
- Переместить n-1 дисков с колышка 2 на колышек 3, используя колышек 1, как временное размещение.
Составим рекурсивную функцию с 4 параметрами:
1 – количество дисков, которое нужно переместить;
2 – номер колышка, на котором они находятся;
3 – номер колышка, на который нужно переместить;
4 – номер временного колышка.
Программа должна печатать инструкцию, куда и откуда нужно перемещать диски, например:
1 => 3
Это значит, что нужно переместить диск с колышка 1 на колышек 3.
Для 3 дисков должен получиться результат:
1 => 3Текст программы:
1 => 2
3 => 2
1 => 3
2 => 1
2 => 3
1 => 3
//программа Ханойские башни - алгоритмРезультат выполнения:
#include <iostream>
using namespace std;
//рекурсивная функция
//m - число дисков, котоое нужно переместить
//a - Колышек, на котором находятся диски
//b - колышек, на который нужно переместить
//c - колышек временного размещения
void hanoy(int m, int a, int b, int c)
{
if(m==0) return;
hanoy(m-1, a, c, b);
cout<<a<<" => "<<b<<endl;
hanoy(m-1, c, b, a);
}
void main()
{
int n = 3, x = 1, y = 2, z = 3;
//необходимо переместить n дисков с 1 на 3 колышек, используя второй
hanoy(n, x, z, y);
cin.get();
return;
}

