C++ 栈实现汉诺塔问题

#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;
}

在这里插入图片描述

发布了167 篇原创文章 · 获赞 52 · 访问量 6935

猜你喜欢

转载自blog.csdn.net/qq_42363032/article/details/103818953