Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
lolers
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 14
#1

Ханойская башня - C++

02.07.2012, 23:14. Просмотров 1674. Ответов 12
Метки нет (Все метки)

Здравтвуйте! Нужно решить задачу где на вход дано Н стержней и К дисков и еще известны начальная и конечная конфигурации(где какие диски лежат). У кого-нибудь есть идеи насчет алгоритма? Для 3-4 стержней я знаю как делать а вот для Н.
http://tristan-interview.blogspot.co...roblem-of.html (нашел что-то об этом, но мне не совсем понятно что тут написано)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2012, 23:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ханойская башня (C++):

Ханойская башня - C++
Ханойская башня является одной из популярных головоломок XIX века. Даны три стержня, на один из которых нанизаны восемь колец, причем...

Ханойская башня - C++
Легенда гласит, что, в Великом храме города Бенарас, под собором, отмечающим середину мира, находится бронзовый диск, на котором укреплены...

Ханойская башня - C++
23. Написать программу, которая печатает последовательность действий (в виде «перенести диск с q на r», где q и r – это А,В или С),...

Ханойская башня - C++
Использование переборных методов (разработка программ решения задачи «Ханойская башня»). на С++

Ханойская башня- тесты - C++
Переместить m дисков с одного из трех стержней на другой, соблюдая: 1) диски можно перемещать с одного стержня на другой только по...

Ханойская башня еще раз - C++
Ну ни как не могу понять.Объясните как тут рекурсия работает. #include <iostream> using namespace std; void...

12
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
02.07.2012, 23:22 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void t(int r, int b, int e) // количество дисков, начальный диск, конечный диск
{
    int c;      // среднее кольцо
 
    if ( ((b==1) && (e==2)) || ((b==2) && (e==1)) )
        c = 3;
    else
        if ( ((b==1) && (e==3)) || ((b==3) && (e==1)) )
            c = 2;
        else
            if ( ((b==2) && (e==3)) || ((b==3) && (e==2)) )
                c = 1;
 
    if (r>1)
    {
        t(r-1, b, c);
        cout << b << " -> " << e << endl;
        t(r-1, c, e);
    }
    else
        cout << b << " -> " << e << endl;
}
0
lolers
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 14
02.07.2012, 23:27  [ТС] #3
вы прочитали мое сообщение? или просто по заголовку закопипастили код?)
0
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
02.07.2012, 23:32 #4
Извиняюсь, немного напутал
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
02.07.2012, 23:38 #5
а в гугле искать не пробовали? что-то выдает, например это
http://alglib.sources.ru/articles/hanoy.php
http://algolist.manual.ru/maths/combinat/hanoi.php
в деталях не разбирался.
0
lolers
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 14
02.07.2012, 23:41  [ТС] #6
Можно, пожалуйста, без тупых подколок по поводу "гугл знает", "ищи в гугле". Искал я часа 3 уже)
ЧИТАЙТЕ ПЛЗ ПЕРВОЕ СООБЩЕНИЕ. Н стержней! К дисков! не 3!!!!
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.07.2012, 05:33 #7
lolers, на той странице что вы дали предлагают использовать поиск в глубину. Однако при больших числах это не прокатит. У вас есть ограничение по времени, а также на K и H?
0
lolers
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 14
03.07.2012, 13:51  [ТС] #8
По времени ограничегий нет. Есть ограничение по н и к. К от 3 до 5 включительно. Н от 1 до восьми включительно
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.07.2012, 13:53 #9
lolers, тогда делайте поиск в глубину и даже не парьтесь.
0
lolers
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 14
03.07.2012, 14:19  [ТС] #10
Вы могли бы написать алгоритм, а то мне несовсем понятно то, что написано на том сайте.
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.07.2012, 17:27 #11
Цитата Сообщение от lolers Посмотреть сообщение
Вы могли бы написать алгоритм
Мог бы.
Цитата Сообщение от lolers Посмотреть сообщение
а то мне несовсем понятно то, что написано на том сайте.
http://translate.google.com
0
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
03.07.2012, 18:13 #12
Допустим у нас 10 стержней. В начале все диски находятся на первом стержне и нужно перенести на 10. Бери любое число от 2 до 9 для временного хранения дисков. И все
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.07.2012, 18:47 #13
g-h, там любое расположение дисков. Это значит, что они могут быть не на одном стержне.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2012, 18:47
Привет! Вот еще темы с ответами:

Задача Ханойская башня. Написать порядок действий в графической интерпритации - C++
День добрый! Учусь на 1 курсе ИВТ. Препод по программированию дал для общего развития написать прогу по ханойской башне в консоли. Но нужно...

Нужна рабочая программа "Ханойская башня" в консоли - C++
Нужна рабочая программа &quot;Ханойская башня&quot; в консоле: Вводишь количество колец, и выводит все ходы перемещения колец. Если таковой...

Рекурсия (нужны комментарии) "Ханойская башня" - C++
Помогите пожалуйста, обьясните написание программы, какие переменные и зачем используются, буду очень благодарна)) #include &lt;iostream&gt;...

Ханойская башня и "любимая" рекурсия - C++
Здравствуйте. Нашёл здесь на форуме код, для решения данной задачи, но самому мало понятно, что и как, может кто подробно разъяснить? ...


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

Или воспользуйтесь поиском по форуму:
13
Yandex
Объявления
03.07.2012, 18:47
Ответ Создать тему
Опции темы

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