汉诺塔(较详细)

#include<stdio.h>
int layer=0;
int main()
{
 int n;
 void hanoi(int n,char x,char y, char z);
 printf("Hanoi tower\nInput number:  ");
 scanf("%d",&n);
 printf("The step to move %2d disks:\n",n);
 hanoi(n,'A','B','C');
 return 0;
}
void hanoi(int n,char x,char y,char z)
{
 void indent(int layer);
 if(n==1)
 {
  indent(layer);
  printf("hanoi(%d, %c, %c, %c) return\n",n,x,y,z);
  layer--;
 }
 else
 {
  indent(layer);
  printf("hanoi(%d, %c, %c, %c) invoke hanoi(%d, %c, %c, %c)\n",n,x,y,z,n-1,x,z,y);
  layer++;
  hanoi(n-1,x,z,y);
  indent(layer);
  printf("hanoi(%d, %c, %c, %c)move:  ",n,x,y,z);
  printf("%c-->%c\n",x,z);
  indent(layer);
  printf("hanoi(%d, %c, %c, %c) invoke hanoi(%d, %c, %c, %c)\n",n,x,y,z,n-1,y,x,z);
  layer++;
  hanoi(n-1,y,x,z);
  indent(layer);
  printf("hanoi(%d, %c, %c, %c) return\n",n,x,y,z);
  layer--;
 }
}
void indent(int layer)
{
 int i;
 for(i=1;i<=2*layer;i++)
  printf("%c",' ');
}

你可能感兴趣的:(汉诺塔)