#include <iostream>
using namespace std;
#define MAXSIZE 50
//栈
struct sqStack
{
int data[MAXSIZE];
int top;
};
sqStack t[4];//定义三个塔,不使用t0塔
void initStack(sqStack &s)
{
s.top=-1;
}
void push(sqStack &s,int key)
{
s.top++;
s.data[s.top]=key;
}
int pop(sqStack &s)
{
int topElem = s.data[s.top];
s.top--;
return topElem;
}
int isEmpty(sqStack s)
{
return (s.top==-1);
}
void printStack(sqStack s)
{
for(int i=0;i<=s.top;i++)
{
cout<<s.data[i]<<" ";
}
cout<<endl;
}
//------------------------------------------------------
//汉诺塔
int nums = 0;
void move(int A, int C){
int ele = pop(t[A]);
push(t[C],ele);
nums++;
cout<<"第"<<nums<<"步:将"<<A<<"柱子顶端的盘移动到"<<C<<endl;
}
void fun(int n, int A, int B, int C){
if(n==1){
move(A,C);
}else{
fun(n-1, A, C, B);
move(A,C);
fun(n-1, B, A, C);
}
}
//向A中添加圆盘
void iniT1(int n ,sqStack &t)
{
for(int i=n;i>=1;i--)
{
push(t,i);
}
}
int main(){
initStack(t[1]);
initStack(t[2]);
initStack(t[3]);
int n = 3;
iniT1(n,t[1]);
cout<<"汉诺塔移动步骤:"<<endl;
fun(n,1,2,3);
printStack(t[3]);
return 0;
}
C++ 栈实现汉诺塔问题
猜你喜欢
转载自blog.csdn.net/qq_42363032/article/details/103818953
今日推荐
周排行