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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.61
fs444
6 / 10 / 0
Регистрация: 18.08.2009
Сообщений: 480
28.03.2010, 13:59     Ханойские башни #1
У Дейтлов есть задача:

Не могу до конца сформулировать алгоритм.

Предположим, я беру 3 колышка и 4 диска
C++
1
2
3
int k1, k2, k3; //колышки 1, 2 и 3 соответственно
 
int d1, d2, d3, d4; //диски 1, 2, 3 и 4 соответственно
Если бы на колышке был только один диск, то можно было бы написать
C++
1
k3 = d1;
Но как мне записать, что с самого начала на колышек №1 надето четыре диска в последовательности сверху вниз 1, 2, 3 и 4?
Миниатюры
Ханойские башни  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2010, 13:59     Ханойские башни
Посмотрите здесь:

C++ Ханойские башни, вывод решения по шагам
C++ Ханойские башни
C++ Ханойские башни
C++ Ханойские башни
Ханойские башни C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UKOL
 Аватар для UKOL
112 / 64 / 7
Регистрация: 17.11.2009
Сообщений: 258
28.03.2010, 14:29     Ханойские башни #2
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;
}
fs444
6 / 10 / 0
Регистрация: 18.08.2009
Сообщений: 480
30.03.2010, 16:03  [ТС]     Ханойские башни #3
Спасибо, буду разбираться =)
System16v
 Аватар для System16v
3 / 3 / 0
Регистрация: 19.02.2014
Сообщений: 115
26.03.2015, 16:54     Ханойские башни #4
А может кто пояснить сам принцип выведения на экран откуда и куда перекладывать? Поменял переменные,чтоб проще понимать было,и пытаюсь вникуть,но не могу понять смысл ,как происходит перебор?
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 <vcl.h>
#include <iostream>
#include <cstdlib>
#include <string>
#include <math>
#include <iomanip>
 
using namespace std;
 
void bashnya(int n=3,int a=1,int b=3,int c=2);
// a - nachalnii stolbik; b - konechnii stolbik, c - promegytochnii stolbik
 
int main()
{
      int x;
      cout << "Vvedite kol-vo diskov: ";
      cin >>x;
      cout <<endl;
      bashnya(x,1,3,2);
      system("pause");
      return 0;
}
void bashnya(int n,int a,int b,int c)
{
  if(n!=0)
  {
   bashnya(n-1,a,c,b);
   cout << a << "->" << b <<endl;
   bashnya(n-1,c,b,a);
  }
}
Т.е. вызывается функция с начальными значениями(3-1,1,2,3) и на экран выводится значения а - 1 и b - 3,т.е. 1->3,а далее что происходит вообще не могу понять .Т.е. вызывается снова функция уже измененными значениями со значениями(3-1,2,3,1),потом снова вызывается (3-1,1,2,3),и каким образом cout выводит именно a - 1 и b - 2?? Откуда берет именно эти значения не пойму хоть тресни . Хотя я даже просто не понимаю что функция делает вообще когда вызывается??Ну вызвалась с параметрами,а что она делает то?
Yandex
Объявления
26.03.2015, 16:54     Ханойские башни
Ответ Создать тему
Опции темы

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