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

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

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

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

12.01.2014, 19:53. Просмотров 1164. Ответов 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++
Ханойские башни C++
C++ Ханойские башни
C++ Ханойские башни
C++ Ханойские башни: демонстрация решения
Ханойские башни, объясните принцип работы! C++
Ханойские башни C++
C++ Ханойские башни
Ханойские башни 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;
}
Yandex
Объявления
12.01.2014, 21:06     Ханойские башни
Ответ Создать тему
Опции темы

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