汉诺塔的问题

来源:百度知道 编辑:UC知道 时间:2024/06/02 20:37:43
我的思路是这样的,建立三个栈A,B,C代表三个柱子,A中装入一组数组,如9,8,7,6,5,4,3,2,1,其中9在最下面,1在最上面,分别代表盘子。然后用汉诺塔的方法,B作辅助柱子,将A中的数字移到C里面去。

跟据这个思路写一个C程序,但是调试出错,请大家帮我看看都有哪些地方错了。

//初始化栈,n代表盘子数。
void initstack(int n,SqStack s)
{
unsigned int size;
size=n+3;
s.base=(int *)malloc(size)
}

//将A柱最上面的盘子移到B柱最上面,A盘子数减1,B盘子数加1
void move(SqStack A,SqStack B)
{
B.top++;
*(B.top-1)=*(A.top-1);
A.top--;
}

//将盘子装入A柱
void pushstack(int n,SqStack A)
{
int i=0;
for(i=n;i>0;i--)
{
&A.top=i;
A.top++;
}
}

//通过递归调用将A盘上的盘子移动到C盘
void hanio(int n,SqStack A,SqStack B,SqStack C)
{
void move(SqStack A,SqStack B);
if(n==1)
{move(A,C)}
else
{hanio(n-1,A,C,B);
move(A,C);
hanio(n-1,B,A,C);
}
}

//将A柱盘子都取出来,如果是1,2.....n则表明程序成功。
void getstack(SqStack A)
{
int length=A.top-A.base;
for

你写的太长了!容易出错!有些东西是没有必要的重复!下面是我所学的.
设A,B,C ,A针上从大到小套着大小互不相等n个金片!............
后面和你说的原理一样!

#include<iostream.h>
void hanoi(char position1,char position2,char position3.int);

int main()
{
int n;
cout<<"请输入金片的个数.";
cin>>n;
cout<<endl;
hanoi('A'.'C'.'B'.n);
return0;
}

void hanoi(char position1,char position2,char position3.int)

{
if(n==1)
cout<<position1<<"\tmoveto\t" <<position2<<endl'
else
{
hanoi( position1,position3, position2,n-1);
cout<<position1<<"\tmoveto\t" <<position2<<endl'
hanoi( position3,position2, position1,n-1);
}
}

#include<stdio.h>
void moveone(char u,char v){
printf("%c→%c\n"