#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;
}
Визуализация проэкта Ханойская Башня !!!
У меня возникла такая проблема: надо написать прогу на Visual C++ которая имитирует расклад дисков в задаче Ханойская Башня. т.е. мне надо взять например 1 диск с 1-ой башни и поместит на 3 башню и так дале. Как это зделать ??? Зарание огромное спасибо !!!! ;) :rolleyes:
Возможно организовать 3 стека, привязанных к графическому представлению.
Цитата: ViToBrother
Привет всем участникам форума :) !!!
У меня возникла такая проблема: надо написать прогу на Visual C++ которая имитирует расклад дисков в задаче Ханойская Башня. т.е. мне надо взять например 1 диск с 1-ой башни и поместит на 3 башню и так дале. Как это зделать ??? Зарание огромное спасибо !!!! ;) :rolleyes:
У меня возникла такая проблема: надо написать прогу на Visual C++ которая имитирует расклад дисков в задаче Ханойская Башня. т.е. мне надо взять например 1 диск с 1-ой башни и поместит на 3 башню и так дале. Как это зделать ??? Зарание огромное спасибо !!!! ;) :rolleyes:
А вообще в GNOME есть классный скринсейвер, который ханойские башни имитирует. Изображение 3-D, в одиночку подобное можно через OpenGL реализовать ...
Вот сами ханои. Иммитация убогая :-)