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

Ханойская башня

17.06.2018, 17:37. Просмотров 165. Ответов 3
Метки нет (Все метки)

Добрый день!
Помогите решить задачку про ханойскую башню. Надо написать приложение на с++, чтобы можно было вводить произвольное число колечек в башне и визуализировать каждый ход башни.
Ну, например, хотя бы вот так должен выглядеть второй ход для башни из 4 колечек (на фото).

Пожалуйста, помогите!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2018, 17:37
Ответы с готовыми решениями:

Ханойская башня
Здравтвуйте! Нужно решить задачу где на вход дано Н стержней и К дисков и еще...

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

Ханойская башня
Здравствуйте! Скажите пожалуйста как можно реализовать решение для ханойской...

Ханойская башня
Все вы видели башню Ханоя(если нет, то есть в гугл :D ) . У вас есть 3 столпа...

Ханойская башня
Ханойская башня является одной из популярных головоломок XIX века. Даны три...

3
VikVika
0 / 0 / 0
Регистрация: 17.06.2018
Сообщений: 3
17.06.2018, 17:44  [ТС] 2
Вот так должен выглядеть результат для второго хода для башни из 4 колечек.
0
Изображения
 
Nerman
1 / 1 / 0
Регистрация: 14.07.2013
Сообщений: 3
18.06.2018, 01:15 3
VikVika, если речь о помощи, а не о написании за Вас программы, попробуйте разобрать пример реализации ханойской башни, взятый с простора интеренета.(искать по запросу <<Непонятен алгоритм программы “Ханойские башни”>>
) Я добавил рендер, на мой взгляд, если пережевать его немного, можно получить нечто удобоваримое =)

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
#include <Windows.h>
#include <vector>
 
 
using namespace std;
 
vector<int> I; //три стержня
vector<int> II;
vector<int> III;
 
void init(int number)
{
    for (int i = 1; i <= number; i++)
    {
        I.push_back(i);
    }
}
 
void move(int from, int to, int number)
{
    switch (from) //снимаем кольцо
    {
    case 1:
        I.erase(I.begin()); 
        break;
 
    case 2:
        II.erase(II.begin());
        break;
 
    case 3:
        III.erase(III.begin());
        break;
    }
 
 
    switch (to) //одеваем кольцо
    {
    case 1:
        if (I.size() > 0)
        {
            I.insert(I.begin(), number); //если кольца есть, добавляем новое "сверху"
        }
        else {
            I.push_back(number);        //а если нет, то снизу
        }
        break;
 
    case 2:
        if (II.size() > 0)
        {
            II.insert(II.begin(), number);
        }
        else {
            II.push_back(number);
        }
        break;
 
    case 3:
        if (III.size() > 0)
        {
            III.insert(III.begin(), number);
        }
        else {
            III.push_back(number);
        }
        break;
    }
}
 
void render() //только рисование
{
    cout << endl;
    for (int i = 0; i < 3; i++)
    {
        if (I.size() > i)
        {
            for (int bubbles = 0; bubbles < I[i]; bubbles++)    //смотрим ширину кольца и выводим необходимое количество знаков
            {
                cout << "O";
            }
            cout << "   ";
        }
        else
        {
            cout << "-  ";
        }
        
        if (II.size() > i)
        {
            for (int bubbles = 0; bubbles < II[i]; bubbles++)
            {
                cout << "O";
            }
            cout << "   ";
        }
        else
        {
            cout << "-  ";
        }
 
        if (III.size() > i)
        {
            for (int bubbles = 0; bubbles < III[i]; bubbles++)
            {
                cout << "O";
            }
            cout << "   ";
        }
        else
        {
            cout << "-  ";
        }
        cout << endl;
    }
}
 
 
 
 
void Towers(int number, int from, int to, int free)
{
    SetConsoleOutputCP(1251); 
 
    if (number != 0)
    {
        Towers(number - 1, from, free, to);
        cout << "\n  Снимаем " << number << "-й диск с " << from << "-го стержня и одеваем его на " << to << "-й стержень";
        
        move(from, to, number); //перемещаем
        render();               //рисуем
        
        Towers(number - 1, free, to, from);
    }
}
int main()
{
    int num; 
    cin >> num; //вводим желаемое количество колец
 
 
    system("cls"); //очищаем консоль
 
    init(num); //инициализация графики ведьмака
    Towers(num, 1, 3, 2); //рекурсивная функция
 
    cout << "\n  "; 
    system("pause"); 
}
1
VikVika
0 / 0 / 0
Регистрация: 17.06.2018
Сообщений: 3
18.06.2018, 20:46  [ТС] 4
Спасибо большое! Плюсик вам в карму
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2018, 20:46

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

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

Ханойская башня. Рекурсия
Здравствуйте. Это одно из решений о ханойской башне. Я не могу понять область...


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

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

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