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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Bog_prog
0 / 0 / 0
Регистрация: 01.01.2014
Сообщений: 8
#1

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

12.01.2014, 19:53. Просмотров 1295. Ответов 4
Метки нет (Все метки)

Головоломка “Ханойские башни” состоит из трех стержней,
пронумерованных числами 1, 2, 3. На стержень 1 надета пирамидка из n дисков
различного диаметра в порядке возрастания диаметра. Диски можно перекладывать с одного стержня
на другой по одному, при этом диск нельзя класть на диск меньшего диаметра.
Необходимо переложить всю пирамидку со стержня 1 на стержень 3 за минимальное число
перекладываний.


Напишите программу, которая решает головоломку; для данного числа дисков n
печатает последовательность перекладываний в формате
a b c, где a — номер перекладываемого диска, b — номер стержня с которого снимается данный диск, c — номер стержня на который надевается данный диск.


Например, строка 1 2 3 означает перемещение диска номер 1 со стержня
2 на стержень 3. В одной строке печатается одна команда.
Диски пронумерованы числами от 1 до n в порядке возрастания диаметров.


Программа должна вывести минимальный (по количеству произведенных операций) способ перекладывания пирамидки из данного числа дисков.
Указание: подумайте, как переложить пирамидку из одного диска? Из двух дисков?
Из трех дисков? Из четырех дисков? Пусть мы научились перекладывать пирамидку
из n дисков с произвольного стержня на любой другой, как переложить пирамидку из n+1 диска,
если можно пользоваться решением для n дисков.


Напишите функцию move (n, x, y),
которая печатает последовательность перекладываний дисков для перемещения
пирамидки высоты n со стержня номер x на стержень номер y.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2014, 19:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ханойские башни (C++):

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

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

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

Ханойские башни - C++
Решил задачу о ханойских башнях рекурсивно: void HanBashR(int count, int start, int mid, int final){ if(count == 2){ cout <<...

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

Ханойские башни - C++
Уважаемые программисты. Срочно очень нужно рекурсивное решение задачи “Ханойские башни” на С# с графическим отображением. Может у...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Bog_prog
0 / 0 / 0
Регистрация: 01.01.2014
Сообщений: 8
12.01.2014, 19:54  [ТС] #2
Я не знаю как с номерами диска быть
AnDrew_LP
160 / 162 / 9
Регистрация: 29.05.2010
Сообщений: 435
12.01.2014, 20:13 #3
Ну хотя бы в гугл гляньте сначала)Самая первая ссылка - на википедию, там есть уже готовый код программы. https://ru.wikipedia.org/wiki/%D0%A5...88%D0%BD%D1%8F
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
33
// Ханойские башни
#include <iostream>
 
using namespace std;
 
void hanoi_towers(int quantity, int from, int to, int buf_peg)  //quantity-число колец, from-начальное положение колец(1-3),to-конечное положение колец(1-3)
{                               //buf_peg - промежуточный колышек(1-3)
    if (quantity != 0)
    {
        hanoi_towers(quantity-1, from, buf_peg, to);
 
        cout << from << " -> " << to << endl;
 
        hanoi_towers(quantity-1, buf_peg, to, from);
    }
}
 
int main()
{
        setlocale(LC_ALL,"rus");
    int start_peg, destination_peg, buffer_peg, plate_quantity;
    cout << "Номер первого столбика:" << endl;
    cin  >> start_peg;
    cout << "Номер конечного столбика:" << endl;
    cin  >> destination_peg;
    cout << "Номер промежуточного столбика:" << endl;
    cin  >> buffer_peg;
    cout << "Количество дисков:" << endl;
    cin  >> plate_quantity;
 
    hanoi_towers(plate_quantity, start_peg, destination_peg, buffer_peg);
return 0;
}
Bog_prog
0 / 0 / 0
Регистрация: 01.01.2014
Сообщений: 8
12.01.2014, 21:00  [ТС] #4
AnDrew_LP, я искал в гугле, это не то: вы выводите номера стержней, а мне нужен ещё и номер диска
AnDrew_LP
160 / 162 / 9
Регистрация: 29.05.2010
Сообщений: 435
12.01.2014, 21:06 #5
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
33
34
// Ханойские башни
#include <iostream>
 
using namespace std;
 
void hanoi_towers(int quantity, int from, int to, int buf_peg)  //quantity-число колец, from-начальное положение колец(1-3),to-конечное положение колец(1-3)
{                               //buf_peg - промежуточный колышек(1-3)
    if (quantity != 0)
    {
        hanoi_towers(quantity-1, from, buf_peg, to);
 
        cout << quantity << ' ' << from << ' ' << to << endl;
 
        hanoi_towers(quantity-1, buf_peg, to, from);
    }
}
 
int main()
{
    setlocale(LC_ALL,"rus");
    int start_peg, destination_peg, buffer_peg, plate_quantity;
    cout << "Номер первого столбика:" << endl;
    cin  >> start_peg;
    cout << "Номер конечного столбика:" << endl;
    cin  >> destination_peg;
    cout << "Номер промежуточного столбика:" << endl;
    cin  >> buffer_peg;
    cout << "Количество дисков:" << endl;
    cin  >> plate_quantity;
 
    hanoi_towers(plate_quantity, start_peg, destination_peg, buffer_peg);
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2014, 21:06
Привет! Вот еще темы с ответами:

Ханойские башни - C++
У Дейтлов есть задача: Не могу до конца сформулировать алгоритм. Предположим, я беру 3 колышка и 4 диска int k1, k2, k3;...

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

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

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


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

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

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