汉诺塔的迭代实现,以及解析
#include<stdio.h>
void move(int n, int num, char ini,char mid, char aim);
int step;
char a='A',b='B',c='C';//代表三个塔
int main(int argc, const char* argv[]){
int n;
int disk=1;
scanf("%d",&n); //设置汉诺塔的个数
move(n,disk,a,b,c); //移动汉诺塔的个数
return 0;
}
void move(int n, int num, char ini, char mid, char aim){ //n是代表汉诺塔上面的盘子数 num代表的是移动的个数
if(n==1){
step++;
printf("Step%d: Move Disk%d from %c to %c\n",step,num,ini,aim);
}
else{ //后边传值的三个字符串不变,变得只是前边的两个参数,
move(n-1,num,ini,aim,mid);
move(1,n,ini,mid,aim);
move(n-1,num,mid,ini,aim);
}
}
//每次只能移动一个 而且每个塔只能是大的在下面, 小的在上面