C语言汉诺塔论文

来源:百度知道 编辑:UC知道 时间:2024/09/28 10:22:45
这是我的C语言程序,希望有朋友可以给我写篇论文,
我只有32分,我都给你...

#include<stdio.h>
#include<stdlib.h>
char *a,*b,*c,t1;
char *Last,*may1,*may2,*p;
int Nd; //盘子总数
int ia,ib,ic;
int *m1,*m2,*m3,*m;
int Hanoi()/*返回1表示任务完成*/
{ char t2,t3,t;
if(ia==Nd && ib==Nd)
return 1;
if(ib==Nd && ic==Nd)/*第1步*/
{ t1=a[ia++];
if(Nd%2)c[--ic]=t1,Last=c,may2=b,m2=&ib,m3=⁣
else b[--ib]=t1,Last=b,may2=c,m2=&ic,m3=&ib;
may1=a;
m1=&ia;
return 0;
}
t1=may1[*m1];
t2=may2[*m2];
t3=Last[*m3];
if(t1>t2)
{ t=t1;t1=t2;t2=t;
p=may1;may1=may2;may2=p;
m=m1;m1=m2;m2=m;
}
//t1到哪里合适呢?到may2还是Last?
if(t1<t3 && (t3-t1)%2)
//如果t1盘小于t3盘且盘号差
//为奇数,那就应移入Last柱
{
Last[--*m3]=t1;(*m1)++;
}

靠 这么复杂

#include <stdio.h>

void move(int n, char a, char c)
{
printf("将盘%d从%c移到%c\n", n, a, c);
}

void hanoi(int n, char a, char b, char c)
{
if(n==0) return;
hanoi(n-1, a, c, b);
move(n, a, c);
hanoi(n-1, b, a, c);
}

int main()
{
int n;
printf("请输入盘数量:");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
system("PAUSE");
return 0;
}