Bit87 Ответов: 1

Нужен совет по внедрению стеков в Ханое


У меня есть некоторые сомнения относительно того, как реализовать стеки в Ханойской игре на C++, я понимаю, как работают Ханой и стеки, но не совсем понимаю, как их связать.

main.cpp

#include <iostream>
#include "HanoiLib.h"
#include "LibPila.h"

using namespace std;
using namespace PILA;

int main()
{
	Pila P1;
	int Dsk;
	
	Dsk = P1.getData(); // Get number of disks
	
	for(int i = 0; i < Dsk; i++) // Insert disks on source peg
	{
		
		P1.PUSH(P1.POP());
		
	}
	
	P1.Print(); // Print all the disks
	
		Tower(Dsk, 1, 3, 2); // Where 1, 2 and 3 are the pegs
		P1.PUSH(P1.POP()); // I'm trying to push from Dst to aux
		Tower(Dsk, 3, 1, 2);
	
	return 0;
}


HanoiLib.ч

#ifndef _LibHanoi_H_
#define _LibHanoi_H_

using namespace std;

		void Tower(int Dsk, int Src, int Dst, int aux)
		{
			if(Dsk > 0)
			{
				Tower(Dsk - 1, Src, Dst, aux);
				cout << "Move disk " << Dsk << "from " << Src << "to " << aux << endl;
				Tower(Dsk - 1, Dst, aux, Src);
					
			}
		}
# endif // __LibHanoi_H_


LibPila.ч

#ifndef _LibPila_H_
#define _LibPila_H_

#define MAX_STACK 10 // stack max limit

using namespace std;
namespace PILA

{

class Pila
{

private:

    int stack[MAX_STACK];
    int top = -1;

public:

void PUSH(int val)
{

	if(top == MAX_STACK -1 )
		cout << "Stack overflow!!" << endl;
	
	stack[++top] = val;

}

int POP()
{

    if(top == -1)
		cout << "There's nothing here!!" << endl;
	
	top--;
	
	return top;

}

int Top()
{
	return stack[top];
}

void Print()
{
	int i;
	
	cout << "Stack: ";
	for(i = 0; i <= top; i++)
		cout << stack[i];
	cout << "" << endl;
}

int getData()
{
	int x;
	
	cout << "Insert NO of disks: "<< endl;
	cin >> x;
	
	return x;
}

};

}
# endif // __LibPila_H_


Что я уже пробовал:

Только дизайн и поток того, как это работает в теории

1 Ответов

Рейтинг:
0

Patrice T

Этот код ничего не делает:

P1.PUSH(P1.POP());

он извлекает значение из стека и помещает его обратно в стек, он заканчивается изменением ni. Все это, если связанный код не прослушивается.

В принципе, ханойским башням не нужна структура стека, просто массив с номером колышка каждого диска.
Nota; куча может быть названа стопкой, но не подразумевает использования структуры стека.
Для начала все диски находятся на колышке 1.

Основные движения.
Перемещение стека от начального колышка к целевому колышку:
- переместить стек минус самый большой диск на промежуточный колышек
- переместить самый большой диск в пункт назначения.
- переместить стек минус самый большой диск в место назначения.