Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
lleonov
-3 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 33
1

Ханойские башни

11.03.2011, 15:32. Просмотров 2275. Ответов 17
Метки нет (Все метки)

Легенда гласит,что где-то в Ханое находится храм,в котором размещеа следущая конструкция:на основании укреплены 3 алмазных
стержня,на один из которых при сотворении мира Брахиа нанизал 64 золотых диска с отверстием посередине,причем оказался самый
большой диск,на нем-чут меньший и так далее,пока на верхушке пирамиды не оказался самый маленький диск.Жреца храма обязаны
перекладывать диски по следующим правилам:
1)За один ход можно перенести только один диск.
2)Нельзя класть больший диск на меньший.
Руководствуясь этими нехитрыми правилами,жрецы должны перенести и сходную пирамиду с 1-го стержня на 3-й.Как только они справятся с
этим заданием,наступит конец света.
Мы предлагаем Вам решить данную задачу с помощью рекурсии.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2011, 15:32
Ответы с готовыми решениями:

Ханойские башни
Не могу понять где ошибка,проверяла на 3 монетках ,разного достоинства,...

Ханойские башни
Ханойские башни. Алгоритм я приблизительно понимаю, но программу написать не...

Ханойские башни
Головоломка “Ханойские башни” состоит из трех стержней, пронумерованных...

Ханойские башни
Ребята, помогите разобраться с алгоритмом, то что сначала перемещаются n-1...

Ханойские башни
Уважаемые программисты. Срочно очень нужно рекурсивное решение задачи...

17
NiRamz
211 / 211 / 33
Регистрация: 26.12.2010
Сообщений: 691
11.03.2011, 15:58 2
тут была похожая задача. потратьте немного своего времени на поиск
http://www.cyberforum.ru/cpp-beginners/thread153746.html
0
lleonov
-3 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 33
11.03.2011, 16:35  [ТС] 3
Ну решите пожалуйста!!Или не можите?
0
NiRamz
211 / 211 / 33
Регистрация: 26.12.2010
Сообщений: 691
11.03.2011, 16:41 4

Не по теме:

ваш пост похож на: "а прыгни в колодец, или слабо?"


задача была решена, причем решение подробно разбиралось.
0
lleonov
-3 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 33
11.03.2011, 16:43  [ТС] 5
Я чот решения не вижу!!Решите мне плиз!!
0
electron4ik
-2 / 0 / 0
Регистрация: 14.02.2011
Сообщений: 6
11.03.2011, 16:49 6
Сильно много требований... Тебе сказали, что решили её, потрудись поискать!
0
slice
63 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
11.03.2011, 16:50 7
троль =) косит под дурачка =)
0
Overmind024
100 / 100 / 27
Регистрация: 10.09.2010
Сообщений: 267
11.03.2011, 17:12 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
using namespace std;
 
/*
    функция принимает три аргумента
    int in - от куда
    int to - куда
    int n - сколько
*/
void move_tower(int in,int to,int n)
{
    if(n==1)// Если 1 диск просто переместить
    {
        cout << in << " -> " << to << endl;
    }
    else //Если больше одного
    {
        int free = 6-(in+to);//Ишем свободное место
        move_tower(in,free,n-1); // Перемешаем все диски кроме одного на свободное место
        move_tower(in,to,1);//Перемешаем нижний диск на нужное место
        move_tower(free,to,n-1);//Перемешаем те диски на нижний
    }
}
 
int main()
{
    int n;
    cout << "n = ";cin >> n;
    move_tower(1,3,n);
    cin.get();
    cin.get();
}
0
lleonov
-3 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 33
11.03.2011, 17:41  [ТС] 9
Надо решить через рекурсию!!!!!!!
0
MILAN
888 / 782 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
11.03.2011, 17:43 10
lleonov, вам и решили через рекурсию.
0
electron4ik
-2 / 0 / 0
Регистрация: 14.02.2011
Сообщений: 6
11.03.2011, 18:13 11
lleonov, прочитай в учебнике, что такое рекурсия, а потом по кнопкам бей...
0
lleonov
-3 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 33
11.03.2011, 18:27  [ТС] 12
а можете обьяснить а то вводиш цыфру а оно ещё какийта цыфры!!плиз!!
0
Overmind024
100 / 100 / 27
Регистрация: 10.09.2010
Сообщений: 267
11.03.2011, 23:59 13
Мне конечно не лень но на твоем месте я бы вбил в гугл(или яндекс, как хочешь) "Ханойская башня".
В общем мы просим ввести число(количество дисков которые надо переставить). Стережешь на котором в начале расположены диски обозначим - 1, пустой - 2, куда переставить - 3. Ну а
ещё какийта цыфры
это наши перестановки. Надеюсь так понятно.
0
Kastaneda
Jesus loves me
Эксперт С++
4942 / 3019 / 346
Регистрация: 12.12.2009
Сообщений: 7,622
Записей в блоге: 2
Завершенные тесты: 1
12.03.2011, 05:04 14
Вот, вся тема - разжовывание рекурсии на примере ханойской башни. Должно помочь)
0
Lerochka
0 / 0 / 0
Регистрация: 13.03.2011
Сообщений: 29
28.03.2011, 13:45 15
При запуске программы на Borland C++ for Dos выдает ошибку unable to open include file "iostream"
когда пишу так #include <iostream.h> тогда выдает ошибку такую Deslaration syntax error для второй строки. что делать?????? помогите очень нужна эта задача.
0
ovli
0 / 0 / 0
Регистрация: 04.08.2012
Сообщений: 16
30.08.2012, 14:59 16
Доброго времени суток, у меня та же задача, через рекурсию...И даже готовый код я не понял, ибо не проходили функцию cin.get(), которая вставлена в тело маин...

А вообще у меня возникла идея создать в теле маин 3 массива, где допустим ar1[63]={64...1},ar2[63]={0...0},ar3[63]={0...0}, где первый числовая последовательность от 1 до 64, а вторые забиты нулями. А в функции допустим назовем ее int sorting(); написать arrey[i]=arrey[i-1]. Ну и еще в маин уже числа преобразовать в отображаемые символы, допустим квадратики...

Теперь никак не могу сложить воедино всю эту абракадабру
0
Invader_Zim
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
30.08.2012, 17:22 17
Lerochka, # include <iostream>
и вообето надо свою тему создавать.
ovli, это будет не через рекурсию, а через циклы. и попробуй графику использовать, а то псевдографика это адЪ.
1
ovli
0 / 0 / 0
Регистрация: 04.08.2012
Сообщений: 16
30.08.2012, 19:26 18
Короче я долго думал и таки психанул и бездумно ее списал ЗДЕСЬ забыв о комбинаторике, что
количество перекладываний в зависимости от количества колец вычисляется по формуле 2^n-1, и при подстановке N_колец=64, очень долго ждал конца работы проги
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;
void Towers (int number, int from, int to, int free)
{
  if (number>0)
  {
    Towers (number-1, from, free, to);
    cout << "--->" << number << "-disc "
         << from << "tower on " << to << "tower \n";
    Towers (number-1, free, to, from);
  }
}
void main()
{
    int N;
    cout<<"input number\n";
    cin>>N;
    Towers (N,1,3,2);
    cout<<endl;
 
}
0
30.08.2012, 19:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2012, 19:26

Ханойские башни
У Дейтлов есть задача: Не могу до конца сформулировать алгоритм. ...

Ханойские башни
Начальная стопка имела 64 диска, нанизанных на один колышек так, что их размеры...

Ханойские башни
Решил задачу о ханойских башнях рекурсивно: void HanBashR(int count, int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru