Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Визуализация проэкта Ханойская Башня !!!

1.8K
10 мая 2008 года
ViToBrother
149 / / 13.05.2007
Привет всем участникам форума :) !!!
У меня возникла такая проблема: надо написать прогу на Visual C++ которая имитирует расклад дисков в задаче Ханойская Башня. т.е. мне надо взять например 1 диск с 1-ой башни и поместит на 3 башню и так дале. Как это зделать ??? Зарание огромное спасибо !!!! ;) :rolleyes:
9.3K
10 мая 2008 года
iridum
175 / / 26.08.2007
Возможно организовать 3 стека, привязанных к графическому представлению.
284
03 июня 2008 года
michael_is_98
587 / / 25.02.2005
Цитата: ViToBrother
Привет всем участникам форума :) !!!
У меня возникла такая проблема: надо написать прогу на Visual C++ которая имитирует расклад дисков в задаче Ханойская Башня. т.е. мне надо взять например 1 диск с 1-ой башни и поместит на 3 башню и так дале. Как это зделать ??? Зарание огромное спасибо !!!! ;) :rolleyes:



А вообще в GNOME есть классный скринсейвер, который ханойские башни имитирует. Изображение 3-D, в одиночку подобное можно через OpenGL реализовать ...

14K
12 июня 2008 года
2504
33 / / 27.03.2007
Вот сами ханои. Иммитация убогая :-)
Код:
#include <iostream>
using namespace std;
   
    int max = 64;    /* Максимальное число колец */
    int st[4][64];     /* 1,2,3 - стержни */
    int nr[4];               /* Число колец на стержнях */
    int nmoves;              /* Число перемещений */
/* ----------------------------------------------
 Печать текущего расположения колец на стержнях
---------------------------------------------- */
void print_st()

{
    int i, j;
    for(i = 1; i <= 3; i++) {
        cout<<endl;
        cout<<("| ");

        for(j = 0; j < nr; j++) cout<<st[j];
       
    }
    cout<<endl;
}
/* ------------------------------------
 Установка начального положения колец
/* ------------------------------------ */
    void init(int nrings)
{
    for(nr[1] = 0; nrings > 0; nr[1]++,nrings--)
        st[1][nr[1]] = nrings;
    /* Нанизали кольца на 1-й стержень */
    nr[2] = nr[3] = 0;
    /* Два других стержня пусты */
    nmoves = 0;
    print_st();
}
/* -----------------------------
   Функция переносит одно кольцо
   со стержня n1 на стержень n2  
 ----------------------------- */
void move1(int n1, int n2)
{
    st[n2][nr[n2]++] = st[n1][--nr[n1]];
//  sleep(1);           /* Пауза в 1 секунду */
    print_st();         /* Печать текущей позиции */
    nmoves++;
}
/* -------------------------------------------------
 Функция hanoi перемещает верхние nrings колец    
 со стержня i1 на стержень i3, используя стержень  
 i2 в качестве промежуточного. 1 <= i1,i2,i3 <= 3.
 ------------------------------------------------- */
void hanoi(int nrings, int i1, int i2, int i3)
{
    if(nrings == 1)
        move1(i1, i3);
    else {
        hanoi(nrings-1, i1, i3, i2);
        move1(i1, i3);
        hanoi(nrings-1, i2, i1, i3);
    }
}
void main()
{
    int nrings;
    cout<<"Number of rings: ";
    cin>>nrings;
    init(nrings);
    hanoi(nrings, 1, 2, 3);
    cout<<"End\n";
    cout<<"Count of moves: "<<nmoves<<endl;

       }
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог